• 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

  • 相关阅读:
    Oracle死锁
    Oracle forall bulk collect批量数据更新
    Oracle组合索引与回表
    查看Oracle执行计划
    Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
    Oracle计算两个时间戳相差秒数,精确到毫秒
    关于Oracle的疑问
    Oracle update和order by
    Oracle Connect by与递归with
    关于Oracle表连接
  • 原文地址:https://www.cnblogs.com/laodong1983/p/9579827.html
Copyright © 2020-2023  润新知