day21

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

 

posted @ 2018-09-04 14:26  老董1983  阅读(139)  评论(0编辑  收藏  举报