Django(二)

时间:2024-01-21 14:42:47

五、Django视图

  概述:

    作用:视图接受web请求,并响应web请求

    本质:视图就是一个python中的函数

    响应:

      网页:重定向、错误视图

      JSON数据

    过程:

      

  url配置:

      配置流程: 

         指定根级url配置文件:

             配置settings.py文件中的ROOT_URLCONF

             ROOT_URLCONF = 'kaige.urls'

          默认实现了

         urlpatterns:

          一个url实例的列表

          url对象:正则表达式、视图名称、名称

        url匹配正则的注意事项:

          如果想要从url中获取一个值,需要对正则加小括号

          匹配正则前方不需要加反斜杠"/"

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

      引入其他url配置:

          在应用中创建urls.py文件,定义本应用的url配置,在工程urls.py文件中使用include()方法  

              
1 from django.contrib import admin
2 from django.urls import path
3 from django.conf.urls import url,include
4 
5 urlpatterns = [
6     # path('admin/', admin.site.urls),
7     url(r'^admin/', admin.site.urls),
8     url(r'^', include('myApp.urls',namespace="myApp")),
9 ]
View Code

      url的反向解析:

          概述:如果在视图、模版中使用了硬编码链接,在url配置发生改变时,动态生成链接的地址  

          解决:在使用链接时,通过url配置的名称,动态生成url地址

          作用:使用url模版

  视图函数:

      定义视图:

          本质:一个函数

          视图参数:一个HttpRequest的实例、通过正则表达式获取的参数

          位置:一般在views.py文件下定义

      错误视图:

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

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

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

  HttpRequest对象:

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

      属性:      

            
1 path:请求的完整路径(不包括域名和端口)
2 method:表示请求的方式,常用的有GET,POST
3 encoding:表示浏览器提交的数据的编码方式
4 GET:类似字典的对象,包含了get请求的所有参数
5 POST:类似字典的对象,包含了post请求的所有参数
6 FILES:类似字典的对象,包含了所有上传的文件
7 COOKIES:字典,包含所有的cookie
8 session:类似字典的对象,表示当前会话
View Code

      方法:

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

      QueryDict对象:

            request对象中的GET、POST都属于QueryDict对象

            方法:

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

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

      GET属性:

          获取浏览器传递过来给服务器的数据

      POST属性:

          使用表单提交,实现post请求

  HttpResponse对象:

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

      作用:给浏览器返回数据

      返回用法:

          不调用模版,直接返回数据

          调用模版

      属性:     

           
1 context:表示返回的内容
2 charset:编码格式
3 status_code:响应状态码
4 context-type:指定输出的MIME类型
View Code

      方法:    

           
1 init():使用页面内容实例化HttpResponse对象
2 write(content):以文件的形式写入
3 flush():以文件的形式输出缓冲区
4 set_cookie(key,value='',max_age=None,expires=None):设置cookie
5 delete_cookie(key):删除cookie
6     注意:如果删除一个不存在的key,就当什么都没有发生
View Code

      子类HttpResponseRedirect:

          功能:重定向,服务器端跳转

      子类JsonResponse:    

          作用:返回json数据,一般用于异步请求

  状态保持:

      概述:

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

          客户端与服务器端的一次通信就是一次会话

          实现状态保持,在客户端或者服务端存储有关会话的数据

          存储方式:

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

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

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

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

      启用session:

          在settings.py文件中修改

          INSTALLED_APPS:'django.contrib.sessions',

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

      使用session:

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

            
1 get(key,default=None):根据键获取session值
2 clear():清空所有的会话
3 flush():删除当前的会话并删除会话的cookie
4 logout():清除session
View Code

      设置过期时间:

          set_expiry(value):如果不设置,两个星期后过期

      存储session的位置:

          数据库:默认存储在数据库中

              SESSION_ENGINE='django.contrib.session.backends.db'

          缓存:只存储在本地内存中,如果丢失不能找回,比数据库快

              SESSION_ENGINE='django.contrib.session.backends.cache'

          数据库和缓存:优先从本地缓存中读取,读取不到再去数据库中获取

              SESSION_ENGINE='django.contrib.session.backends.cached_db'

      使用redis缓存session:       

          1 pip3 install django-redis-sessions
          2 
          3 SESSION_ENDINE='redis_sessions.session'
          4 SESSION_REDIS_HOST = 'localhost'
          5 SESSION_REDIS_PORT = 6379
          6 SESSION_REDIS_DB = 0
          7 SESSION_REDIS_PASSWORD = 'sunck'
          8 SESSION_REDIS_PREFIX = 'session'