• django视图的定义



    概述

    视图:视图的本质就是一个python中的函数,作用是接收web请求,并响应web请求。

    过程:django获取浏览器输入的url,经过django中的url管理器匹配到对应的视图函数,视图管理器执行视图函数,并将结果返回给浏览器。


    url的配置

    • 工程下url配置

    1.制定根级url配置文件,在seetings.py文件中配置ROOT_URLCONF = 'project.urls',django默认已配置。

    2.在urls.py配置urlpatterns

    • 应用url配置

    1.创建应用,python manage.py startapp app

    2.在工程目录下的urls.py中导入模块from django.conf.urls import url, include,在urlpatterns中添加url(r'^app/', include('app.urls', namespace="myApp")

    3.在应用中创建urls.py文件,导入模块from django.conf.urls import url,添加urlpatterns列表,在列表中配置自定义url。


    url的配置注意事项

    1.如果想要从url中获取一个值,需要对正则加小括号,如url(r'^test/(d+)/',views.test,name='test')

    2.匹配正则前方不需要加反斜杠,因为在工程目录下urls.py文件中进行如下配置url(r'^app/', include('app.urls', namespace="myApp")

    3.正则前需要加r表示字符串不转义。


    url的反向解析

    在定义url的时候使用namespacename对url进行命名。

    urls.py中:

    urlpatterns = [
    	url(r'^app/',include('app.urls',namespace='app'))
    ]
    

    app中urls.py中:

    urlpatterns = [
    	url(r'^index/',views.index,name='index')
    ]
    

    在视图中反向解析:

    from django.http import HttpResponseRedirect
    from django.urls import reverse
    
    def index(request):
    	return HttpResponseRedirect(reverse('app:index'))
    

    视图函数

    视图本质是一个函数,函数的参数是一个HttpRequest实例。

    错误视图的定义:

    404视图:找不到网页时返回,500视图:视图代码出现错误(服务器错误),400视图:错误出现在客户的操作

    配置:在settings.py文件中设置DEBUG的值为

    True

    ,为Fasle永远不会调用错误视图,ALLOWED_HOSTS = ['*']。然后再定义相对应的网页,404.html等。


    HttpRequest对象

    概述

    服务器接收http请求后,会根据报文创建HttpRequest对象,视图函数的第一个参数就是HttpRequest对象。

    属性

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

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

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

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

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

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

    request.COOKIES字典,包含所有的cookie

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

    方法

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

    QueryDict对象

    request对象中的GET、POST都属于QueryDict对象,GET对象用来获取浏览器传递过来给服务器的数据,POST用来使用表单提交实现post请求。

    request.GET.get(key):作用:根据键获取值,只能获取一个值

    request.POST.get(key):作用:根据键获取值,只能获取一个值

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

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


    HttpResponse对象

    概述

    作用:给浏览器返回数据,HttpRequest对象是由django创建的,HttpResponse对象由用户创建。

    from django.http import HttpResponse
    
    # 不调用模板,直接返回数据
    def index(request):
    	if request.method == 'GET':
    		return HttpResponse('欢迎访问')
    
    # 调用模板,render方法
    def index(request):
    	if request.method == 'GET':
    		data = '欢迎访问'
    		return render(request,'index.html',{'data':data})
    
    

    属性

    response.content:表示返回的内容

    response.charset:编码格式

    response.status_code:响应状态码

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

    方法

    response.init():使用页面内容实例化HttpResponse对象

    response.write(content):以文件的形式写入

    response.flush():以文件的形式输出缓冲区

    response.set_cookie(key, value='', max_age=None,exprise=None):设置cookie

    response.delete_cookie(key):删除cookie,如果删除一个不存在的key,就当什么都没发生

    子类HttpResponseRedirect

    功能:重定向,服务器端跳转,简写:redirect(to)

    from django.http import HttpResponseRedirect
    from django.shortcuts import redirect
    
    def redirects(request):
    	return redirect('/app/index')
    

    状态保持

    概述

    http协议时无状态的,每次请求都是一次新的请求,不记得以前的请求,客户端与服务器端的一次通信就是一次会话,实现状态保持,在客户端或者服务端存储有关会话的数据。

    存储方式:cookie,所有的数据存储在客户端,不要存敏感的数据,session,所有的数存储在服务端,在客户端用cookie存储session_id。

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

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

    启用session

    seetings.py文件django已默认启用。

    INSTALLED_APPS = [
    	'django.contrib.sessions',
    ]
    
    MIDDLEWARE = [
    	'django.contrib.sessions.middleware.SessionMiddleware',
    ]
    

    使用session

    启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象

    取session值

    	session = request.session.get(key) # 根据键获取session值
    
    

    设置session值

    	request.session[key] = value # 设置session值
    

    清除session值

    from django.contrib.auth import logout
    
    request.session.clear() # 清空所有的会话
    request.session.flush() # 删除当前的会话并删除会话的cookie
    logout(request) # django自带的清除cookie的方法
    
    

    设置过期时间

    如果不设置,两个星期后过期

    request.session.set_expiry(10) # 10秒后过期
    request.session.set_expiry(0) # 关闭浏览器失效
    request.session.set_expiry(None) # 永不过期
    
    想要不可替代,必须与众不同
  • 相关阅读:
    【PAT】1020. Tree Traversals (25)
    Pongo建立信号基站-实际上还是考中位数
    从此不再惧怕URI编码:JavaScript及C# URI编码详解
    WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?
    命令行下开启与关闭windows防火墙关端口(转)
    MySql数据库批量备份命令
    C#检查文件是否被占用
    C#使用Gzip解压缩完整读取网页内容
    [转]免费电话网专用免费平台
    libQt5Core.so: undefined reference to `dlclose@GLIBC_2.4'
  • 原文地址:https://www.cnblogs.com/xcool/p/9890749.html
Copyright © 2020-2023  润新知