zoukankan      html  css  js  c++  java
  • [Python] Django框架入门3——深入视图

    说明:

      本文主要深入了解视图(views.py),涉及路由配置、定义视图、Request对象、Response对象、状态保持等。

    一、路由配置

      1、配置位置(settings.py 的 ROOT_URLCONF)

        

        在settings.py中的ROOT_URLCONF指向的urls.py则是主要的路由配置文件。

     

      2、修改主路由文件(test2.urls)

    1 from django.conf.urls import url, include
    2 from django.contrib import admin
    3 
    4 urlpatterns = [
    5     url(r'^admin/', admin.site.urls),
    6     # 应用booktest的路由文件   
    7     url(r'^booktest/', include('booktest.urls'))
    8 ]

        urlpatterns是一个url()实例的列表,url(正则表达式, 视图函数, 名称name)

        编写URLconf注意点:

          如果需要从url中捕获一个值,需要在它周围设置一对圆括号,如:url(r'^pro/(d+)$', views.pro, name='pro'),对应的请求url为[ http://127.0.0.1:8000/pro/112 ]这里的红色部分则为需要传到请求的参数。

          不需要添加前导的反斜杠,如应写为 “test/”而不是写作 “/test/”。

          每个正则表达式前面的r表示字符串的不转义。

        

        正则表达式非命名组,通过位置参数传递给视图

          url( r'^([0-9]+)/$', views.detail, name='detail' )

          这里的参数是按照正则匹配的顺序,对应视图的参数位置。对应的detail方法如:def detail(request, id)

        正则表达式命名组,通过关键字参数传递给视图,本例中关键字参数为id

          url( r'^(?P<id>[0-9]+)/$', views.detail, name='detail' )

          通过?P<参数名>与视图参数名一一对应。

        参数匹配规则:优先使用命名参数,如果没有命名参数则使用位置参数。

        每个捕获的参数都作为一个普通的python字符串传递给给视图。

      3、包含其他的URLconfs

        在应用中创建urls.py文件,定义本应用中的urlconf,再在项目的 urls.py中使用include:

     

         匹配过程:先与主URLconf匹配,成功后再用剩余的部分与应用的URLconf匹配,过程如下图:

     

        使用include可以去除URLconf的冗余,即已完成匹配的部分不会再下一次的匹配中使用。

        在include中通过namespace定义命名空间,用于反解析。

        

      4、URL的反解析

        如果在视图、模板中使用硬编码的链接,在urlconf发生改变的时候,维护起来不是那么容易。

        解决:在做链接的时,通过指向urlconf的名称,动态生成链接地址

        视图:使用django.core.urlresolvers.reverse()函数

        模板:使用url模板标签

    二、定义视图(视图函数)

      def detail(request, id)

      视图本质是一个函数,视图的参数:一个HttpRequest实例,通过正则表达式获取的位置参数;通过正则表达式组获取的关键字参数。

      在应用目录下默认有views.py文件,一般视图都定义在这个文件中。

      如果处理功能过多,可以将函数定义到不同的py文件中(不推荐,推荐使用多应用,即新建应用)

     

    三、Request对象

      服务器接收http协议的请求后,会根据报文创建HttpRequest对象。

      视图函数的第一参数是HttpRequest对象。

      在django.http模块中定义了HttpRequest对象的API。

      1、属性

        path:一个字符串,表示请求页面的完整路径,不包含域名。

        method:一个字符串,表示请求使用的HTTP请求方式,常用值有GET、POST。

        encoding:一个字符串,表示提交的数据的编码方式。

          如果是None则表示使用浏览器的默认设置,一般为utf-8

          这个属性是可写,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问都使用新的encoding值。

        GET:一个类似于字典的对象(QueryDict对象),包含get请求方式的所有参数。

        POST:一个类似于字典的对象(QueryDict对象),包含post请求方式的所有参数。

        FILES:一个类似于字典的对象,包含所有的上传文件。

        COOKIE:一个标准的Python字典,包含所有的cookie,键值都为字符串。

        session:一个即可读又可写的类似于字典的对象,表示当前的会话,只当Django启用会话的支持时才可用,详见"状态保持"。

      

      2、方法

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

      3、QueryDict对象

        定义在django.http.QueryDict。

        Request对象的属性GET、POST都是QueryDict类型的对象。

        与Python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况。

        方法get():根据键获取值:

          只能获取键的一个值。

          如果一个件同时拥有多个值,获取最后一个值。

         

        方法getlist():根据键获取值:

          将键的值以列表返回,可以获取一个键的多个值

           

      4、GET属性

        request.GET['key']

        request.GET.get('key')

        request.GET.getlist('key')

      

      5、POST属性

        request.POST['key']

        request.POST.get('key')

        request.POST.getlist('key')

    四、Response对象

      在django.http模块中定义了HttpResponse对象的API。

      HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建。

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

     

       调用模板

     

      

      1、Response的成员

        属性:

          context:表示返回的内容,字符串类型。

          charset:表示response采用的编码字符集,字符串类型。

          status_code:响应的HTTP响应的状态码。

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

        方法:

          init:使用页内容实例化HttpResponse对象

          write(contetn):以文件的方式写。

          flush():以伟健的方式输出缓存区。

          set_cookie(key, value='', nax_age=None, expires=None):设置Cookie。

            key、value都是字符串类型;

            max_age是一个整数,表示在指定秒数后过期

            expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerialize时才可序列化

            max_age与expires二选一

            如果不指定过期时间,则两个星期后过期。

          delete_cookie(key):删除指定的key的Cookie,如果key不存在什么也不发生。

      2、子类HttpResponseRedirect

        重定向、服务端跳转,构造函数的第一个参数用来指定重定向的地址:

      

         推荐使用反向解析

     

      3、子类JsonResponse

        返回json数据,一般用于异步请求。__init__(data),帮助用户创建JSOn编码的响应,参数data是字典对象。

        JsonResponse的默认content-Type为application/json。

      

       

      4、简写函数

        渲染视图 render

       

        重定向

         

    五、状态保持

      1、启用session

        使用django-admin startproject myapp 创建的项目默认启用session

        开启只需修改settings.py文件

       

        禁用session:删除上面指定的两个值,禁用会话将节省一些性能消耗。

      2、使用session

        启用会话后,每个HttpRequest对象都将具有一个session属性,它是一个类字典的对象

        get('key', default=None):根据键获取会话的值。

        clear():清楚所有会话。

        flush():删除当前的会话数据并删除会话的Cookie。

        del request.session['member_id']:删除会话

  • 相关阅读:
    Ubuntu 16.04在启动和关机时不显示启动和关机画面且显示详细的命令信息,没有进度条和Logo,或者只有紫色界面,或者没有开机画面等问题解决
    Ubuntu 16.04设置开机关机时显示命令详细信息不显示进度条Logo
    Ubuntu中LightDM是什么(转)
    Linux终止进程的工具kill/killall/pkill/xkill/skill用法区别(转)
    Ubuntu 16.04安装BleachBit清理系统垃圾文件
    Ubuntu 16.04禁用来宾账号(Guest User)
    Java反射 : Declared的作用 ( 例如 : getMethods和getDeclaredMethods )
    java isAssignableFrom instanceof 小结 专题
    java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法
    spring boot使用AbstractXlsView导出excel
  • 原文地址:https://www.cnblogs.com/reader/p/9523118.html
Copyright © 2011-2022 走看看