django视图层

视图层包含了Django的核心代码,它对外接收用户请求,对内调度模型层和模板层,统合数据库和前端。最后根据业务逻辑,将处理好的数据与前端结合,返回给用户。视图层是真正的后端。

URL路由系统

URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应。可以把URL视为web程序对外暴露的接口。

URL路由在Django中集中在url.py文件里。Django提倡项目有个根url.py,然后各子应用有各自的url.py,是一种解耦的模式。

 

Django处理用户请求的流程

  1. 决定要使用的URLconf模块。通常,这是ROOT_URLCONF设置的值,但我们也可以通过中间件自己设置url入口。
  2. 加载对应模块,并寻找可使用的urlpatterns
  3. 依次匹配url,在与请求的URL相匹配的第一个模式停下来。
  4. 导入并调用匹配行对应的views
  5. 如果没有匹配到正则表达式,或者过程中抛出异常,将调用一个适当的错误处理视图。

urlpatterns列表中的一条条url,每条url,都是urlpatterns列表的一个元素。先后顺序有重要关系,不能随意摆放,因其匹配用了短路模式。最后一条的末尾建议添加一个逗号

 

命名组

在Python的正则表达式中,命名组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。例如:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),

 

URLconf匹配请求url中的哪部分?

请求的URL被看做是一个普通的Python字符串,URLconf在其上查找并匹配。进行匹配时将不包括GET或POST请求方式的参数以及域名。

url捕获的参数是字符串类型

指定视图参数的默认值

举例来说

# URLconf
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]

# View (in blog/views.py)
def page(request, num="1"):
    # Output the appropriate page of blog entries, according to num.
    ...

在这里,当路由捕获到匹配请求,会跳转到默认页码1。

 

路由转发

from django.conf.urls import include, url

urlpatterns = [
    # ... 忽略 ...
    url(r'^community/', include('django_website.aggregator.urls')),
    url(r'^contact/', include('django_website.contact.urls')),
    # ... 忽略 ...
]

路由转发使用的是include()方法,需要提前导入,它的参数是转发目的地路径的字符串,路径以圆点分割。请求是通过根路由url,转发到匹配到的子路径url中。

向路由传递额外参数

URLconfs具有一个钩子(hook),允许你传递一个Python字典作为额外的关键字参数给视图函数。

 

HttpRequest对象

用户请求发送过来,Django将HTTP数据打包成为HttpRequest对象,并传递给每个视图函数作为第一参数,即request。

类定义:class HttpRequest[source]

其属性大部分是只读的。

HttpRequest.FILES是用于上传文件的请求。

HttpRequest.COOKIES是包含cookie信息的字典。是类似字典的数据格式,可以在cookie中读写数据,注意这种数据是不安全的,最好不要包含敏感信息。

中间件可以设置自定义属性。

 

HttpResponse对象

HttpResponse类定义在django.http模块中。

HttpRequest对象由Django自动创建,而HttpResponse对象则由程序员手动创建.

我们编写的每个视图都要实例化、填充和返回一个HttpResponse对象。也就是函数的return值。

HttpResponse的子类

Django包含了一系列的HttpResponse衍生类(子类),用来处理不同类型的HTTP响应。与HttpResponse相同, 这些衍生类存在于django.http之中。

 

文件上传

Django在处理文件上传时,文件数据被打包封装在request.FILES中。

 

Django模型类对数据的增删改查

 

  1. 数据库配置好之后,在views引入模型类,这样就可以在views视图中对数据库进行增删改查
  2. 使用模型类名称.objects.all()便可以查找数据库全部的数据啦。objects是django中的模型类管理器,调用即可
  3. 修改数据可直接:模型类(模型类属性名="新的值'),然后再调用save方法便可以往数据库添加数据了。
  4. 获取某条数据:如果是指定某一条件,那么可以使用模型类中的get()方法,get里边就是条件,用delete方法可删除数据。查找之后可以这样来修改原来模型类属性的值,当然修改还是要save()的。
  5. 修改:filter也是可以查询到指定数据并且修改数据,但是它用update便可以修改了,不需要save,比get()更方便一点。

 

参考:http://www.liujiangblog.com/course/django/136

posted @ 2018-01-28 21:26  dion至君  阅读(141)  评论(0编辑  收藏  举报