Django视图

视图的作用流程

一、错误视图

    

404视图:找不到网页(url匹配不成功时返回)时返回

500视图:在视图代码中出现错误(服务器代码错误)

400视图:错误出现在客户的操作

二、HttpRequest对象

(1)概述:服务器接收http请求后,会根据报文创建HttpRequest对象视图的第一个参数就是HttpRequest对象,django创建的,之后调用视图时传递给视图。

(2)属性:

path:请求的完整路径(不包括域名和端口)

method:表示请求的方式,常用的有GET,POST

encoding:表示浏览器提交的数据的编码方式,一般为utf-8

GET:类似于字典的对象,包含了get请求的所有参数

POST:类似于字典的对象,包含了post请求的所有参数

FILES:类似字典的对象,包含了所有上传的文件

COOKIES:字典,包含所有的cookie

session:类似字典的对象,表示当前会话

(3)方法:

is_ajax():如果是通过XMLHttpRequest发起的,返回True

get():根据键获取值,只能获取一个值

getlist():将键的值以列表的形式返回,可以获取多个值

三、GET属性

获取浏览器传递过来数据:例子:www.sunck.wang/abc?a=1&b=2&c=3

(1)get()

www.sunck.wang/abc?a=1&b=2&c=3

urls.py文件中:

url(r'^get1', views.get1),   #结尾不能加$,否则无法匹配

views.py文件中:

def get1(request):
    a = request.GET.get('a')
    b = request.GET.get('b')
    c = request.GET.get('c')
    return HttpResponse(a + " " + b + " " + c)

(2)getlist()

 www.sunck.wang/abc?a=1&a=2&c=3

urls.py文件中:

url(r'^get2', views.get2),

views.py文件中:

def get2(request):
    a = request.GET.getlist('a')
    a1 = a[0]
    a2 = a[1]
    c = request.GET.get('c')
    return HttpResponse(a1 + " " + a2 + " " + c)

四、POST属性

使用表单模拟POST请求:

首先,关闭CSRF:project\project\settings.py   :

 MIDDLEWARE = [
                    'django.middleware.security.SecurityMiddleware',
                    'django.contrib.sessions.middleware.SessionMiddleware',
                    'django.middleware.common.CommonMiddleware',
                    # 'django.middleware.csrf.CsrfViewMiddleware',
                    'django.contrib.auth.middleware.AuthenticationMiddleware',
                    'django.contrib.messages.middleware.MessageMiddleware',
                    'django.middleware.clickjacking.XFrameOptionsMiddleware',
                ]

示例:

templates/App/register.html文件中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <form action="register/" method="post">
        姓名:<input type="text" name="name" value=""/>
        <hr/>
        性别:<input type="radio" name="gender" value="1">男<input type="radio" name="gender" value="0">女
        <hr/>
        年龄:<input type="text" name="age" value=""/>
        爱好:<input type="checkbox" name="hobby" value="power">权利<input type="checkbox" name="hobby" value="money">金钱<input type="checkbox" name="hobby" value="boy">美男<input type="checkbox" name="hobby" value="girl">美女
        <hr/>
        <input type="submit" value="注册">
    </form>
</body>
</html>

views.py文件中

def showregister(request):
    return render(request, 'myApp/register.html',)
def register(request):
    name = request.POST.get("name")    #接收表单提交上来的数据
    gender = request.POST.get("gender")
    age = request.POST.get("age")
    hobby = request.POST.getlist("hobby")
    return HttpResponse("注册成功!")
五、HttpResponseRedirect重定向

功能:自动跳转到另一个页面,重定向,服务器端的跳转

HttpResponseRedirect 和 redirect

示例:

from django.http import HttpResponseRedirect
from django.shortcuts import redirect
def redirect1(request):
    # return HttpResponseRedirect('/redirect2')
    return redirect('/redirect2')     #跳转到redirect2的路径上
def redirect2(request):
    return HttpResponse("我是重定向后的视图")
六、状态保持
   

http协议是无状态的,每次请求都是一次新的请求,它不记得之前的请求。 

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

存储的方式:

cookie:所有数据存储在客户端,不要存储敏感的数据

session:所有的数据存储在服务端,在客户端用cookie存储session_id

状态保持的目的在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据

注意:不同的请求者之间不会共享这个数据,与请求者一一对应

启用session        

project\project\settings.py中

INSTALLED_APPS    'django.contrib.sessions',

MIDDLEWARE    'django.contrib.sessions.middleware.SessionMiddleware',

使用session

启用session后,每个httpRequest对象都有一个session属性

 get[key, default=None]    根据键获取session

clear()    清空所有会话

flush()    删除当前会话并删除会话的cookie

示例:

建立主页面的html:templates/myApp/main.html

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

登录页面:templates/myApp/login.html

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

views.py:

def main(request):
    #取session
    username= request.session.get('name')      #拿取session中的数据
    return render(request,'myApp/main.html',{'username':username})
def login(request):
    return render(request,'myApp/login.html')
def showmain(request):
    username=request.POST.get('username')    #从表单form中拿取数据
    print("************")
    request.session['name']=username   #将数据传给session
    request.session.set_expiry(10)     #设置session过期时间
    return HttpResponseRedirect("/sunck/main")      #跳转到主页面

def quit(request):      #用作清除session
    #清除session
    #logout(request)
    request.session.clear()
    return HttpResponseRedirect("/sunck/main")

urls.py:

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^main/$',views.main),
    url(r'^login/$',views.login),
    url(r'^showmain/$',views.showmain),
    url(r'^quit/$',views.showmain),
]


发布了45 篇原创文章 · 获赞 118 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章