https://www.cnblogs.com/wupeiqi/p/5246483.html
上节内容回顾:
1.生命周期
url>路由>函数或类>返回字符串或者模板语言
form表单提交:
2.路由系统URL
a. /index/ -> 函数或类
b. /index/(\d+) -> 函数或类 参数按顺序皴法
c. /index/(?P<nid>\d+) 参数对应名字
d. /index/(?P<nid>\d+) name='root' 通过name生成url
reverse()
{% url 'root' 1%}
e. /crm/ include('app01.urls') ->路由分发
f.默认值
url(r'^index/', views.index,{'name':'root',})
/index/ {'web':'root'} #传值操作
def func(request,web):
return ...
g.命名空间
/admin/ include('app01.urls')
/crm/ include('app01.urls')
app01.urls
/index/(\)
知识点
URL
Views
-请求的其他信息
from django.core.handlers.wsgi import WSGIRequest
request.environ
request.environ['HTTP_USER-AGENT']
-装饰器
FBV:
def auth(func):
def inner(reqeust,*args,**kwargs):
v = reqeust.COOKIES.get('username111')
if not v:
return redirect('/login/')
return func(reqeust, *args,**kwargs)
return inner
CBV:
from django import views
from django.utils.decorators import method_decorator
@method_decorator(auth,name='dispatch')
class Order(views.View):
# @method_decorator(auth)
# def dispatch(self, request, *args, **kwargs):
# return super(Order,self).dispatch(request, *args, **kwargs)
# @method_decorator(auth)
def get(self,reqeust):
v = reqeust.COOKIES.get('username111')
return render(reqeust,'index.html',{'current_user': v})
def post(self,reqeust):
v = reqeust.COOKIES.get('username111')
return render(reqeust,'index.html',{'current_user': v})
Models
-一大波操作
Templates
-母版的使用 ...html
extends
{%extends 'master.html'%} #使用模板的名称
{% block title %} 用户管理 {% endblock%} #title替换部分的名称
使用模板时,css js在子版里边使用可能会因为没有加载而无法调用
可以在模板中使用
{% block css %} {% endblock%}
{% block js%} {% endblock%}
来解决问题
一个子版只可以使用一个母版
include
可以把重复的内容写到一个tag.html文件中(比如一个div)
然后在需要使用重复内容的文件中调用tag.html
{% include 'tag.html'%}
{% include 'tag.html'%}
{% include 'tag.html'%}就可以得到多个重复的div
当然,通过include还可以传递数据
-
- 帮助方法:{ { item.event_start|date:"Y-m-d H:i:s"}}{ { bio|truncatewords:"30" }}{ { my_list|first|upper }}{ { name|lower }}
-自定义函数
simple_tag
a. app下创建templatetags目录
b. 任意xxoo.py文件
#!/usr/bin/env python
#coding:utf-8
from
django
import
template
from
django.utils.safestring
import
mark_safe
register
=
template.Library()
@register
.simple_tag
def
my_simple_time(v1,v2,v3):
return
v1
+
v2
+
v3
@register
.simple_tag
def
my_input(
id
,arg):
result
=
"<input type='text' id='%s' class='%s' />"
%
(
id
,arg,)
return
mark_safe(result)
c. 创建template对象 register
d.
@register.simple_tag
def func(a1,a2,a3,...)
.......
return 'afdasf'
e. settings中注册APP
f. 顶部{% load xxoo %}
g. {% 函数名 arg1 arg2 %}
h.在settings中配置当前app,不然django无法找到自定义的simple_tag
缺点:不能作为判断条件 优点:参数任意
另外一种
@register
.filter
def
my_input(
id
,arg):
cookie
如果禁用cookie后,网站将无法登陆
可以理解为客户端浏览器上的一个文件,类似于字典的键值对 {'k':'asdf'}
1、获取Cookie:
request.COOKIES[
'key'
]
request.get_signed_cookie(key, default
=
RAISE_ERROR, salt
=
'', max_age
=
None
)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
rep
=
HttpResponse(...) 或 rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt
=
'加密盐'
,...)
参数:
key, 键
value
=
'', 值
max_age
=
None
, 超时时间
expires
=
None
, 超时时间(IE requires expires, so
set
it
if
hasn't been already.)
path
=
'/'
, Cookie生效的路径,
/
表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain
=
None
, Cookie生效的域名
secure
=
False
, https传输
httponly
=
False
只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。
1 2 | <script src = '/static/js/jquery.cookie.js' >< / script> $.cookie( "list_pager_num" , 30 ,{ path: '/' }); |
session
分页(自定义的分页)
XSS:
用户添加的数据是不安全的,不能够作为HTML元素或者js语句来执行
如果要执行,需要在前端加入{
{page_str|safe}} 或者在后端添加 make_safe(page_str) (需添加 from django.utils.safestring import mark_safe)
Form验证
作业 :
https://www.cnblogs.com/wupeiqi/p/6144178.html
https://www.cnblogs.com/wupeiqi/p/6216618.html