博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day21
阅读量:4947 次
发布时间:2019-06-11

本文共 4128 字,大约阅读时间需要 13 分钟。

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):
  ....
 
{
{ 参数1|my_input:"参数2"}}
这种可以放到if后边作为判断条件,但是只能使用两个参数

 

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: 后台控制过期时间
 
  2、设置Cookie:

 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

 

转载于:https://www.cnblogs.com/laodong1983/p/9579827.html

你可能感兴趣的文章
hdu 1709 The Balance
查看>>
prometheus配置
查看>>
定宽320 缩放适配手机屏幕
查看>>
BZOJ 2120 数颜色 【带修改莫队】
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
Codeforces 40 E. Number Table
查看>>
CLR via C#(第3 版)
查看>>
java语法之final
查看>>
关于响应式布局
查看>>
详解ASP.Net 4中的aspnet_regsql.exe
查看>>
python 多进程和多线程的区别
查看>>
hdu1398
查看>>
[android] 网络断开的监听
查看>>
156.Binary Tree Upside Down
查看>>
MongoDB在windows下安装配置
查看>>
Upselling promotion stored procedure
查看>>
mysql编码配置
查看>>
KVM地址翻译流程及EPT页表的建立过程
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>