Django之views

2018-06-23 13:28:24来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

一.路由配置系统

1.1 基本认识

  a. URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表

  b. URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。

例如,http://www.example.com/myapp/ 请求中,URLconf 将查找myapp/

在http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找myapp/

URLconf 不检查请求的方法。换句话讲,所有的请求方法 —— 同一个URL的POSTGETHEAD等等 —— 都将路由到相同的函数。

  c. 每个捕获的参数都作为一个普通的Python 字符串传递给视图,无论正则表达式使用的是什么匹配方式。

1.2 语法

urlpatterns = [
         url(正则表达式, views视图函数,参数,别名)

1.3 基本用法

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),         #不加$,匹配开头
    url(r'^login/$', views.login),              #加$,完整匹配
#加括号,将作为位置参数传入view函数里
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^menu/(\d+)', views.menu), # menu(request,1)
'''
有名分组(named group)
将用"()"捕获的URL中的值以关键字参数传入view函数中
在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。
'''
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
'''
利用有名分组,给view参数设默认值
'''

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),
]

1.4 URL分发

'''
当有多个app,且url路径较多时,为方便管理,可进行url分发
在app目录中建立自己的urls,在共享urls文件中利用‘include’实现
'''
from django.conf.urls import include, url
urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^blog/', include('blog.urls')),
]

另一种分发:

url的第二个参数也可以直接进行分发,语法:

url(r'xxx',([url(r'yyy',views)],None,None))
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^stark/', ([
                         url(r'app01/userinfo/', ([
                                                      url(r'add', add),
                                                      url(r'delete', delete),
                                                  ], None, None)),
                         url(r'app01/book/', ([
                                                  url(r'add', add)
                                              ], None, None))
                     ], None, None))

 

1.5 URL反向解析

  在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。

人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。

换句话讲,需要的是一个DRY 机制。除了其它有点,它还允许设计的URL 可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。

获取一个URL 最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL 的其它必要的信息有视图参数的类型(位置参数、关键字参数)和值。

Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:

  • 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。
  • 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。

第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。

在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

  • 在模板中:使用url 模板标签。
  • 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
  • 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法
#urls中
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^loginggggg/$', views.login,name='login'),

#templates中
<form action="{% url 'login' %}" method="post">

1.6 名称空间(namespace)

二.视图函数(views)

2.1 介绍

  接受web请求并进行逻辑处理继而返回web响应。

  约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。

2.2 请求对象

request作为views函数中的第一个参数使用

Request.body
'''
一个字符串,代表请求报文的主体。在处理非 HTTP 形式的报文时非常有用,例如:二进制图片、XML,Json等。
  但是,如果要处理表单数据的时候,推荐还是使用 HttpRequest.POST 。
  另外,我们还可以用 python 的类文件方法去操作它,详情参考 HttpRequest.read() 。
'''

Request.path
'''
一个字符串,表示请求的路径组件(不含域名)。
  例如:"/music/bands/the_beatles/"
'''

Request.method
'''
一个字符串,表示请求使用的HTTP 方法。必须使用大写。
  例如:"GET"、"POST"
'''

Request.GET
'''
一个类似于字典的对象,包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。
'''

Request.POST
'''
  一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成 QueryDict 对象。
  POST 请求可以带有空的 POST 字典 —— 如果通过 HTTP POST 方法发送一个表单,但是表单中没有任何的数据,QueryDict 对象依然会被创建。
   因此,不应该使用 if request.POST  来检查使用的是否是POST 方法;应该使用 if request.method == "POST" 
  另外:如果使用 POST 上传文件的话,文件信息将包含在 FILES 属性中。
'''

Request.META
'''
   一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:
    CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
    CONTENT_TYPE —— 请求的正文的MIME 类型。
    HTTP_ACCEPT —— 响应可接收的Content-Type。
    HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
    HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
    HTTP_HOST —— 客服端发送的HTTP Host 头部。
    HTTP_REFERER —— Referring 页面。
    HTTP_USER_AGENT —— 客户端的user-agent 字符串。
    QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
    REMOTE_ADDR —— 客户端的IP 地址。
    REMOTE_HOST —— 客户端的主机名。
    REMOTE_USER —— 服务器认证后的用户。
    REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。
    SERVER_NAME —— 服务器的主机名。
    SERVER_PORT —— 服务器的端口(是一个字符串)。
   从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时,
    都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_  前缀。
    所以,一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。
'''

 

2.3 render

  结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

render(request, template_name,{})

template_name:模板名称

{}:可选,对html文件进行渲染。具体见Django之templetes

return render(request,'dep_change.html',{'dep_init_name':dep_init_name})
return render(request,'dep_change.html',locals())      #不需一个一个传值

  

2.4 redirect

重定向。参数为一个url地址。

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:分享一个爬取HUST(哈理工)学生成绩的Python程序(OCR自动识别验证

下一篇:也谈 Python 的中文编码处理