HttpResponse

概述:给浏览器返回数据

HttpRequest对象是由django创建的,HttpResponse对象由程序员创建

用法

1:不调用模板,直接返回数据。

例:

def getxob(request):
    return HttpResponse('xob')

2:调用模板

使用render方法

原型

render(request,templateName[,context])

作用

结合数据和模板,返回一个完整的HTML页面

参数

request 请求体对象
templateName 模板对象
context 传递给需要渲染在模板上的数据

示例

def showregist(requset):
    return  render(requset,'app1/regist.html')

def Grades(request):
    gradelist=grades.objects.all()
    return  render(request,'app1/index.html',{"grades":gradelist})

属性

content:表示返回的内容的类型

charset:编码格式

status_code:响应得状态码 200;304;404

content-type:指定输出的MIME类型

例:

def showresponse(request):
    res=HttpResponse()
    print(res.charset)
    print(res.content)
    print(res.status_code)
    print(res.content_type)
    return  HttpResponse("张银昭")

结果:
utf-8
b”
200

方法

init

使用内容实例化HttpResponse

write(content)

以文件的形式写入

flush()

以文件的形式输出缓冲区

set_cookie(key,value)

max_age=None,exprise=None

delete_cookie(key)

删除cookie
注意:如果删除了不存在的cookie,就什么都没发生
例:

def cookiestext(request):
    res=HttpResponse()
    cookie=request.COOKIES
    res.write("<h1>"+cookie["xob"]+"</h1>")#写出cookie
    #cookie=res.set_cookie("xob","handsome")#先存cookie
    return res

子类HttpResponseRedirect

功能:重定向,服务器端的跳转
简写:redirect(to)推荐反向解析
例:

from django.http import  HttpResponseRedirect
from django.shortcuts import redirect
def redirect1(request):
    #return HttpResponseRedirect('/redirect2')#重定向到redirect2页面
    return  redirect('/redirect2')#上下结果一样,下面是简写
def redirect2(request):
    return  HttpResponse("重定向")

子类JsonResponse

返回Json数据,一般用于异步请求
init(self,data)
data 字典对象
注意:Content-type 类型为applaction/json

状态保持

概述:Http协议是无状态的,每一次请求都是新的请求,不记得以前的请求

客户端与服务器的一次通信就是一次会话
实现状态保持,在客户端或者在服务端存储会话的数据

存储的方式:

cookie 所有的数据的存在客户端,不要存敏感的数据(不推荐)
session 所有的数据的存在服务端,在客户端用cookie存储session_id
状态保持的目的:在一段时间内跟踪请求者qi的状态,可以跨页面访问请求者的数据
注意:不同的请求者之间不会共享这个数据,与请求者一一对应

启用session

settings INSTALLED_APPS = [ ‘django.contrib.sessions’, 默认起用session
MIDDLEWARE = [ ‘django.contrib.sessions.middleware.SessionMiddleware’,

使用session

启用session每个HttpRequest对象都有一个session数据,就是一个类似字典的对象
get(key,default=None):根据键获取session值
clear():清空所有的会话
flush():删除当前的会话,并删除会话的cookie
session的key存在cookie里,key的值存在数据库里

综合 网页的登录与登出

需求:访问网页登录之后,再次访问网页就会记录登录状态。

#views
def main(request):
    #取session
    username= request.session.get("username","游客")
    return  render(request,'app1/main.html',{"name":username})
def login(request):
   return  render(request,'app1/login.html')
def showmain(request):
    username=request.POST.get('username')
    #存储session
    request.session['username']=username
    print(request.session['username'])
    return redirect('/main')
from  django.contrib.auth import  logout
def quit(request):
    #清除session
   # logout(request)
   # request.session.clear()
    request.session.flush()#三种方法 
    return redirect("/main")

简单的登录

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
  <form action="/showmain/" method="post">
    <input type="text" name="username">
       <input type="submit"value="登录">
  </form>
</body>
</html>

主界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的</title>
</head>
<body>
<h1>欢迎:{{name}}</h1>
<a href="/login">登录</a>
<a href="/quit">退出登录</a>
</body>
</html>

版权声明:本文为rmxob原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/rmxob/p/12599948.html