• Django(二)


    五、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'
  • 相关阅读:
    Yii “CDbConnection failed to open the DB connection: could not find driver"解决办法
    安装多个PHP环境会导致phpinfo和php -v中查看到的PHP版本不一致
    sql pivot、unpivot和partition by用法
    sql把字符数组转换成表
    sql获取数组指定元素
    sql获取数组长度
    Razor基础语法
    ADO.NET基础
    Asp.Net网站统一处理错误信息
    WebApp页面开发小结
  • 原文地址:https://www.cnblogs.com/ccmldl/p/9614331.html
Copyright © 2020-2023  润新知