• 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

  • 相关阅读:
    python 登陆接口
    FTP 的搭建过程和遇到的问题
    ELK 的好文章连接
    logstash 配置文件实例
    使用 screen 管理你的远程会话
    Conda常用命令整理
    python 增加矩阵行列和维数
    26个你不知道的Python技巧
    python单下划线、双下划线、头尾双下划线说明:
    python 类方法的互相调用及self的含义
  • 原文地址:https://www.cnblogs.com/dion-90/p/8372464.html
Copyright © 2020-2023  润新知