说明:

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

一、路由配置

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

    

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

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

 from django.conf.urls import url, include
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
# 应用booktest的路由文件
url(r'^booktest/', include('booktest.urls'))
]

    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']:删除会话

[Python] Django框架入门3——深入视图的更多相关文章

  1. [Python] Django框架入门

    说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...

  2. [Python] Django框架入门5——静态文件、中间件、上传图片和分页

    说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ...

  3. [Python] Django框架入门2——深入模型

    说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...

  4. [Python] Django框架入门4——深入模板

    说明: 本文主要深入了解模板(templates),主要涉及模板编写步骤.定义模板.模板继承.HTML转义.CSRF等. 一.模板 动态生成HTML.表达外观.实现业务逻辑(view)与显示内容(te ...

  5. 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

  6. 三 Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

  7. 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

    利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = ...

  8. Python Django框架笔记(五):模型

    #前言部分来自Django Book (一)    前言 大多数web应用本质上: 1. 每个页面都是将数据库的数据以HTML格式进行展现. 2. 向用户提供修改数据库数据的方法.(例如:注册.发表评 ...

  9. Python Django框架笔记(三):django工作方式简单说明和创建用户界面

    (一)  说明 简单说明下django的工作方式,并举2个例子. (二)  Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...

随机推荐

  1. 基于Ajax的前后端分离

    这种开发模式可以称为SPA (Single Page Application 单页面应用)时代. 这种模式下,前后端的分工非常清晰,前后端的关键协作点是 Ajax 接口.看起来是如此美妙,但回过头来看 ...

  2. 使用Docker运行SQL Server

    现在.net core已经跨平台了,大家也都用上了linux用上了docker.跟.net经常配套使用的SQL SERVER以前一直是windows only,但是从SQL Server 2017开始 ...

  3. @ConfigurationProperties 注解使用姿势,这一篇就够了

    在编写项目代码时,我们要求更灵活的配置,更好的模块化整合.在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 applicat ...

  4. S2第四章

  5. 0 Spark完成WordCount操作

    先看下结果: pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  6. html+css+dom补充

    补充1:页面布局 一般像京东主页左侧右侧都留有空白,用margin:0 auto居中,一般.w. <!DOCTYPE html> <html lang="en"& ...

  7. 个人使用的lilypond第一个模板

    手残非要用lilypond打谱真是…… 可是lilypond又能满足各种细节标记和谱文混排,这是musescore达不到的 所以还是开这个坑,希望能逐渐自己有能力编写自己的音乐教材 个人用Fresco ...

  8. 洛谷P2125 题解

    吐槽: 只能说这道题很数学,本数学蒟蒻推了半天没推出来,只知道要用绝对值,幸亏教练提醒,才勉强想出正解(似乎不是这样的),真的是很无语. 以上皆为吐槽本题,可直接 跳过 分析: 既然题目是要使书架上的 ...

  9. Spring的数据库编程浅入浅出——不吹牛逼不装逼

    Spring的数据库编程浅入浅出——不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...

  10. [NUnit]No results

    Results (nunit3) saved as TestResult.xmlCommitting...No results, this could be for a number of reaso ...