一流的低价网站建设,室内设计效果图的软件,c 开发网站开发,vi手册views详解 http请求中产生两个核心对象#xff1a; http请求#xff1a;HttpRequest对象 http响应#xff1a;HttpResponse对象 #xff08;1#xff09; HttpRequest对象 当请求一个页面时#xff0c;Django 创建一个 HttpRequest对象包含原数据的请求。然后 Django 加载… views详解 http请求中产生两个核心对象 http请求HttpRequest对象 http响应HttpResponse对象 1 HttpRequest对象 当请求一个页面时Django 创建一个 HttpRequest对象包含原数据的请求。然后 Django 加载适当的视图通过 HttpRequest作为视图函数的第一个参数。每个视图负责返回一个HttpResponse目标。 path 请求页面的全路径不包括域名method 请求中使用的HTTP方法的字符串表示。全大写表示。例如if req.methodGET:do_something()elseif req.methodPOST:do_something_else()
GET: 包含所有HTTP GET参数的类字典对象
POST 包含所有HTTP POST参数的类字典对象服务器收到空的POST请求的情况也是可能发生的也就是说表单form通过HTTP POST方法提交请求但是表单中可能没有数据因此不能使用if req.POST来判断是否使用了HTTP POST 方法应该使用 if req.methodPOST
COOKIES: 包含所有cookies的标准Python字典对象keys和values都是字符串。
FILES 包含所有上传文件的类字典对象FILES中的每一个Key都是input typefile name /标签中 name属性的值FILES中的每一个value同时也是一个标准的python字典对象包含下面三个Keysfilename 上传文件名用字符串表示content_type: 上传文件的Content Typecontent 上传文件的原始内容
user 是一个django.contrib.auth.models.User对象代表当前登陆的用户。如果访问用户当前没有登陆user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法来辨别用户是否登陆if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用
session 唯一可读写的属性代表当前会话的字典对象自己有激活Django中的session支持时该属性才可用。
META 一个标准的Python字典包含所有可用的HTTP头。可用标题取决于客户端和服务器但这里是一些例子CONTENT_LENGTH – 请求体的长度一个字符串。CONTENT_TYPE – 请求体的类型。HTTP_ACCEPT - 为响应–可以接受的内容类型。HTTP_ACCEPT_ENCODING – 接受编码的响应HTTP_ACCEPT_LANGUAGE – 接受语言的反应HTTP_HOST – 客户端发送的HTTP主机头。HTTP_REFERER – 参考页面HTTP_USER_AGENT – 客户端的用户代理字符串。QUERY_STRING – 查询字符串作为一个单一的分析的字符串。REMOTE_ADDR – 客户端的IP地址REMOTE_HOST – 客户端的主机名REMOTE_USER – 用户通过Web服务器的身份验证。REQUEST_METHOD – 字符串如GET或POSTSERVER_NAME – 服务器的主机名SERVER_PORT – 服务器的端口一个字符串。 2HttpResponse对象 对于HttpRequest对象来说是由django自动创建的但是HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。 在HttpResponse对象上扩展的常用方法 页面渲染render推荐render_to_response, 页面跳转redirect locals 可以直接将对应视图函数中所有的变量传给模板 get()如果key对应多个valueget()返回最后一个value。 值得注意的是对于页面渲染的方法中render和render_to_response使用方法和功能类似但是render功能更为强大推荐使用 3. render() render(request, template_name, contextNone, content_typeNone, statusNone, usingNone)[source] 结合给定的模板与一个给定的上下文返回一个字典HttpResponse在渲染文本对象 所需的参数 template_name 一个模板的使用或模板序列名称全称。如果序列是给定的存在于第一个模板将被使用。 可选参数 context 一组字典的值添加到模板中。默认情况下这是一个空的字典。
content_type MIME类型用于生成文档。
status 为响应状态代码。默认值为200
using 这个名字一个模板引擎的使用将模板。 def register(request):request就是HttpRequest对象HttpResponse常用的扩展对象render:页面渲染,可将参数以字典的形式传递给页面 也可以通过locals()将参数传递过去,没有进行页面跳转,url没有改变redirect:页面跳转,url发生改变:param request::return:# 获取请求方法if request.method GET:对注册来分析,当我们进入注册页面的时候,一般都是GET请求# 获取GET里面的信息ret request.GETprint(GET信息,ret) # 输出 GET信息 QueryDict: {} 是一个字典对象return render(request,register.html)elif request.method POST:通过表单提交之后,变成了POST请求# 获取POST里面的信息ret request.POSTprint(POST信息,ret)输出 POST信息 QueryDict: {csrfmiddlewaretoken: [oeKNHGKKm9Ip6B4Y2bfZM16lD2ECoTylPzX7rKzEUO5baf5Dfw4uB2zz5zz61fL9], username: [Jason], pwd: [123], gender: [1]}也是一个字典对象,可以通过句点获取表单提交过来的数据return redirect(/login/)def login(request):return render(request,login.html) 模板系统Template 组成HTML代码逻辑控制代码 逻辑控制代码的组成 1、变量使用双大括号来引用变量 var_name # 视图函数
def index(request):people{username:Jason,age:18,gender:男}usernameJasonreturn render(request,index.html,{username:username,people:people}) !--模板文件--
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body!--通过双大括号来获取变量--h1欢迎{{ username }}/h1!--通过句点符号来实现深度查询--h2用户名:{{ people.username }}/h2h2年龄:{{ people.age }}/h2h2性别:{{ people.gender }}/h2
/body
/html 2、过滤器语法格式{{obj|filter:param}} (1)add 使用形式为{{ value | add: 2}} 意义将value的值增加2 (2)addslashes 使用形式为{{ value | addslashes }} 意义在value中的引号前增加反斜线 (3)capfirst 使用形式为{{ value | capfirst }} 意义value的第一个字符转化成大写形式 (4)cut 使用形式为{{ value | cut:arg}} 例如如果value是“String with spaces” arg是 那么输出是Stringwithspaces 意义从给定value中删除所有arg的值 (5)date 使用形式为 (a) {{ value | date:D d M Y }}例如如果value是一个datetime对象(datetime.datetime.now())那么输出将是字符串Wed 09 Jan 2008 (b) {{ value | date }}这种形式没有格式化字符串这时候格式化字符串会自动采用DATE_FORMAT所设置的形式。 意义将日期格式数据按照给定的格式输出 (6)default 使用形式{{ value | default: nothing }}例如如果value是“”那么输出将是nothing 意义如果value的意义是False那么输出使用缺省值 (7)default_if_none 使用形式{{ value | default_if_none:nothing }}例如如果value是None那么输出将是nothing 意义如果value是None那么输出将使用缺省值 (8)dictsort 意义如果value的值是一个字典那么返回值是按照关键字排序的结果 使用形式{{ value | dictsort:name}}例如 如果value是 [{name: zed, age: 19},{name: amy, age: 22},{name: joe, age: 31},]那么输出是[{name: amy, age: 22},{name: joe, age: 31},{name: zed, age: 19},] (9)dictsortreversed 意义如果value的值是一个字典那么返回值是按照关键字排序的结果的反序 使用形式与上述(8)完全相同。 (10)divisibleby 使用形式{{ value | divisibleby:arg}}如果value是21arg是3那么输出将是True 意义如果value能够被arg整除那么返回值将是True (11)escape 使用形式{{ value | escape}} 意义替换value中的某些字符以适应HTML格式包括 is converted to lt; is converted to gt; (single quote) is converted to #39; (double quote) is converted to quot; is converted to amp; escape仅仅在输出的时候才起作用所以escape不能够用在链式过滤器的中间 他应该总是最后一个过滤器如果想在链式过滤器的中间使用那么可以使用force_escape (12)escapejs 使用形式{{ value | escapejs }} 意义替换value中的某些字符以适应JAVASCRIPT和JSON格式。 (13)filesizeformat 使用形式{{ value | filesizeformat }} 意义格式化value使其成为易读的文件大小例如13KB4.1MB等。 (14)first 使用形式{{ value | first }} 意义返回列表中的第一个Item例如如果value是列表[a,b,c]那么输出将是a。 (15)floatformat 使用形式{{ value | floatformat}}或者{{value|floatformat:arg}} arg可以是正数也可以是负数。没有参数的floatformat相当于floatformat:-1 (1)如果不带arg那么引擎会四舍五入同时最多只保留一位小数。 34.23234 {{value|floatformat}} 34.234.00000 {{value|floatformat}} 3434.26000 {{value|floatformat}} 34.3 (2)如果arg是正数那么引擎会四舍五入同时保留arg位的小数。 34.23234 {{value|floatformat:3}} 34.23234.00000 {{value|floatformat:3}} 34.00034.26000 {{value|floatformat:3}} 34.260 (3)如果arg是负数那么引擎会四舍五入如果有小数部分那么保留arg位小数否则则没有任何小数部分。 34.23234 {{value|floatformat:-3}} 34.23234.00000 {{value|floatformat:-3}} 3434.26000 {{value|floatformat:-3}} 34.26 (16)get_digit 使用形式{{ value | get_digit:arg}}例如如果value是123456789arg是2那么输出是8 意义给定一个数字返回请求的数字记住1代表最右边的数字如果value不是合法输入 那么会返回所有原有值。 (17)iriencode 使用形式{{value | iriencode}} 意义如果value中有非ASCII字符那么将其进行抓化成URL中适合的编码如果value已经进行过URLENCODE 改操作就不会再起作用。 (18)join 使用形式{{ value | join:arg}}如果value是[a,b,c]arg是//那么输出是a//b//c 意义使用指定的字符串连接一个list作用如同python的str.join(list) 19)last 使用形式{{ value | last }} 意义返回列表中的最后一个Item 20)length 使用形式{{ value | length }} 意义返回value的长度。 (21)length_is 使用形式{{ value | length_is:arg}} 意义返回True如果value的长度等于arg的时候例如如果value是[a,b,c]arg是3那么返回True 22)linebreaks 使用形式{{value|linebreaks}} 意义value中的\n将被br/替代并且整个value使用/p包围起来从而适和HTML的格式 (23)linebreaksbr 使用形式{{value |linebreaksbr}} 意义value中的\n将被br/替代 (24)linenumbers 使用形式{{value | linenumbers}} 意义显示的文本带有行数。 (25)ljust 使用形式{{value | ljust}} 意义在一个给定宽度的字段中左对齐显示value (25)center 使用形式{{value | center}} 意义在一个给定宽度的字段中中心对齐显示value (25)rjust 使用形式{{value | rjust}} 意义在一个给定宽度的字段中右对齐显示value (26)lower 使用形式{{value | lower}} 意义将一个字符串转换成小写形式 (27)make_list 使用形式{{value | make_list}} 意义将value转换成一个list对于字符串转换成字符list对于整数转换成整数list 例如value是Joel那么输出将是[uJ,uo,ue,ul]value是123那么输出将是[1,2,3] (28)pluralize 使用形式{{value | pluralize}}或者{{value | pluralize:es}}或者{{value | pluralize:y,ies}} 意义如果value不是1则返回一个复数后缀缺省的后缀是s (29)random 使用形式{{value | random}} 意义从给定的list中返回一个任意的Item (30)removetags 使用形式{{value | removetags:tag1 tag2 tag3...}} 意义删除value中tag1,tag2....的标签。例如如果value是bJoel/b buttonis/button a spanslug/span tags是b span那么输出将是Joel buttonis/button a slug (31)safe 使用形式{{value | safe}} 意义当系统设置autoescaping打开的时候该过滤器使得输出不进行escape转换 (32)safeseq 与上述safe基本相同但有一点不同的就是safe是针对字符串而safeseq是针对多个字符串组成的sequence (33)slice 使用形式{{some_list | slice::2}} 意义与python语法中的slice相同:2表示第一的第二个元素 (34)slugify 使用形式{{value | slugify}} 意义将value转换成小写形式同事删除所有分单词字符并将空格变成横线 例如如果value是Joel is a slug那么输出将是joel-is-a-slug (35)stringformat 这个不经常用先不说 (36)striptags 使用形式{{value | striptags}} 意义删除value中的所有HTML标签 (37)time 使用形式{{value | time:H:i}}或者{{value | time}} 意义格式化时间输出如果time后面没有格式化参数那么输出按照TIME_FORMAT中设置的进行。 (38)title 转换一个字符串成为title格式。 (39)truncatewords 使用形式{{value | truncatewords:2}} 意义将value切成truncatewords指定的单词数目 例如如果value是Joel is a slug 那么输出将是Joel is ... (40)truncatewords_html 使用形式同(39) 意义truncation点之前如果某个标签打开了但是没有关闭那么在truncation点会立即关闭。 因为这个操作的效率比truncatewords低所有只有在value是html格式时才考虑使用。 (41)upper 转换一个字符串为大写形式 (42)urlencode 将一个字符串进行URLEncode (43)urlize 意义将一个字符串中的URL转化成可点击的形式。 使用形式{{ value | urlize }} 例如如果value是Check out www.djangoproject.com那么输出将是 Check out a hrefhttp://www.djangoproject.comwww.djangoproject.com/a (44)urlizetrunc 使用形式{{ value | urlizetrunc:15}} 意义与(43)相同但是有一点不同就是现实的链接字符会被truncate成特定的长度后面以...现实。 (45)wordcount 返回字符串中单词的数目 (46)wordwrap 使用形式{{value | wordwrap:5}} 意义按照指定的长度包装字符串 例如如果value是Joel is a slug那么输出将会是 Joelis aslug (47)timesince 使用形式{{value | timesince:arg}} 意义返回参数arg到value的天数和小时数 例如如果 blog_date 是一个日期实例表示 2006-06-01 午夜 而 comment_date 是一个日期实例表示 2006-06-01 早上8点 那么 {{ comment_date|timesince:blog_date }} 将返回 8 hours. (48)timeuntil 使用形式{{value | timeuntil}} 意义与(47)基本相同一个不同点就是返回的是value距离当前日期的天数和小时数 3、标签语法格式{% tags %} # views函数
def index(request):temp_list[星期一,星期二,星期三,星期四,星期五,星期六,星期日]return render(request,index.html,{temp_list:temp_list})
!--HTML模板--
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body !--标签的使用--
!--对于for来说,不支持中断循环,也不支持continue语句,内置一个forloop模板变量forloop.counter表示循环的次数forloop.first当第一次循环的时候,为True
--
{% for temp in temp_list %}!--对于if来说,不允许同一标签里同时出现and和or,这样容易产生歧义--{% if temp 星期一 or temp 星期三 or temp 星期五 or temp 星期日%}h2不上班/h2{% elif temp 星期二 or temp 星期四%}h3上班/h3{% else %}h1吃大餐/h1{% endif %}{% empty %}
!--当temp_list为空,会走这里,和for循环并列--h1放假时间太多了/h1
{% endfor %}
!-- 其他标签: {% csrf_token %}:用于生成csrf_token标签,用于防止跨站攻击验证,如果在views中用的是render_to_response方法 则不会生效,一般会和表单一起提交给后台 {% url reg %}:引用路由配置的地址,也就是路由中的name值,如: form methodpost action{% url reg %} ... /form url(r^register,views.register,namereg) {% with totalfhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}:使用更简单的变量名代替复杂的变量名{% verbatim %} {% endverbatim %}:禁止render{% load tz %}:加载标签库 -- /body
/html 4、自定义filter和simple_tag 步骤 a在app中创建tempaltetags模块 b创建任意的.py文件如my_tags.py c在使用自定义simple_tag和filter的html文件中导入之前创建的my_tags.py{% load my_tags %} d使用simple_tag和filter #自定义标签和过滤器
from django import template
register template.Library() # regsiter 的名字是固定的,不可改变
register.filter()
def filter_multi(x,y):自定义过滤器:param x: 模板中过滤器左边的参数:param y: 模板中过滤器右边的参数:return:return x*ydef simple_tag_multi(x,y):自定义标签:param x::param y::return:return x*y
# views函数
def index(request):age 18return render(request,index.html,{age:age})!--引入自定义标签--
{% load my_tags %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body!--自定义filter限制参数个数,只能传递一个参数,比如只能传2,可以用在控制语句中--h1{{ age|filter_multi:2 }}/h1!--自定义tag不限制参数个数 但是不能用在控制语句中--h1{% simple_tag_multi 3 5 %}/h1
/body
/html 5、模板继承extends % include %该标签允许在当前模板中包含其他模板标签的参数是所要包含的模板名称可以是一个变量也可以是用单/双引号硬编码的字符串 {% endblock %} 本文转自 炫维 51CTO博客原文链接: http://blog.51cto.com/xuanwei/1980449