zoukankan      html  css  js  c++  java
  • day65



    1. 装饰器


      1.装饰器的原理如下

                             def wrapper(fn):
                    def inner(*args,**kwargs):
                        执行被装饰函数之前的操作
                        ret = fn(*args,**kwargs)
                        执行被装饰函数之后的操作
                        
                        return ret 
                    return inner
                    
                
                def yue(tools):
                    pass
                    
                yue = wrapper(yue)
                
                print(yue(tools))                            


    2. tags
      1. for
        {% for i in list %}
          {{ i }}
        {% endfor %}

        {% for i in list %}
          {{ i }}

        {% empty %}

          空的
        {% endfor %}

    forloop {}
    forloop.counter    当前循环的索引值 索引值从1开始
    forloop.counter0    当前循环的索引值 索引值从0开始
    forloop.revcounter    当前循环的索引值(倒序) 索引值到1结束
    forloop.revcounter0   当前循环的索引值(倒序) 索引值到0结束
    forloop.first       当前循环是否是第一次 True
    forloop.last      当前循环是否是最后一次

    forloop.parentloop {}
    2. if
    {% if 条件%}
    操作
    {% endif %}

    {% if 条件%}
    操作

    {% elif 条件 %}

    {% else %}

    {% endif %}

    注意:
    1. 不支持连续判断 a>b>c a>b and b>c
    2. 不支持算数运算 + - * / add

    3. with
    {% with 变量 as 别名%}

    {{ 别名 }}
    {% endwith %}

    4. csrf_token
    1. 放在form表单中
    2. 在表单中添加了一个隐藏的input标签
    name csrfmiddlewaretoken
    valve askjdaskdhashdkasd 64
    5. 母版继承
    1. 定义一个母版 普通的HTML代码 base.html
    2. 在母版中定义block块
    3. 子页面中继承的母版 {% extends 'base.html' %}
    4. 重写block块

    注意事项:
    1. {% extends 'base.html' %}写在第一行
    2. {% extends name %} name写继承的母版的名字字符串
    3. 自定义的内容写在block中
    4. 定义多个block块 一般要有js css


    2. 今日内容
    1. 模板
    1. 组件
    1. 写一段的代码 nav.html
    2. {% include 'nav.html' %}

    2. 静态文件相关
    1. {% load static %}

    2. {% static '相对路径' %} ——》 去settings中获取STATIC_URL '/static/' 和相对路径进行拼接

    3. {% get_static_prefix %} ——》 去settings中获取STATIC_URL '/static/'

    "{% get_static_prefix %}相对路径"


    3. 自定义inclusion_tag
    1. 在app下创建一个templatetags的python包 templatetags名字不能错
    2. 在包下写py文件 mytags
    3. 编辑文件
    from django import template
    register = template.Library()

    4. 定义函数
    可以接受参数
    返回一个字典
    5. 函数上加装饰器
    @register.inclusion_tag('pagination.html')
    6. 函数返回的字典 交给 pagination.html 渲染




    2. 视图

    1。 CBV 和 FBV
        FBV function based view
        CBV class based view

    2. CBV的流程

      1. 定义CBV

    from django.views import View
                    class AddPress(View):
                    
    
                        def get(self, request):
                            print('get')
                            print(self.request)
                            return render(self.request, 'add_press2.html')
    
                        def post(self, request):
                            print('post')
                            press_name = request.POST.get('name')
                            Press.objects.create(name=press_name)
                            return redirect('/press_list/')

    2. 使用
    url(r'^add_press/$', views.AddPress.as_view()), # 添加出版社

    3. 流程
    1. AddPress.as_view() —— 》 view函数


    2. 当请求到来的时候执行view函数:
    1. 实例化自己写的类 —— 》self
    self = cls(**initkwargs)

    2. self.request = request

    3. 执行 self.dispatch(request, *args, **kwargs)

    1. 执行父类中的dispatch方法
    1. 判断请求方式是否被允许
    1. 允许的情况
    handler = 通过反射获取 get post 方法

    2. 不允许的情况
    handler = 不允许的方法

    3. handler(request, *args, **kwargs)

    2. 返回HttpResponse对象
    4. 返回HttpResponse对象 给django

    3. request
    print(request.method)
    print(request.GET)
    print(request.POST)
    print(request.FILES)

    print(request.path_info)
    print(request.body)
    print(request.scheme)
    print(request.path)
    print(request.encoding)
    print(request.META)


    print(request.get_host())
    print(request.get_full_path())
    print(request.is_secure())
    print(request.is_ajax())
    4. response

    from django.shortcuts import render, HttpResponse, redirect
    1. HttpResponse HttpResponse('字符串')
    2. render(request,'html文件名',{}) —— 》 HTML代码
    3. redirect(跳转的地址)

    4.
    HttpResponse(json.dumps(ret)) # Content-Type: text/html; charset=utf-8

    JsonResponse(ret) # Content-Type: application/json


    3. 路由





  • 相关阅读:
    跨浏览器OCX
    安装QT5.02
    Ubuntu登陆密码忘记
    QTableView
    VMware安装时Error 1324. The path My Documents contains a invalid character的原因和解决方法
    VS2005 与虚拟机的那点事
    创建掩码位图来实现透明绘图
    【转载】spring注解整理
    记录spring test类无法插入数据问题
    Uniapp 原生开发uniapp.arr 新老兼容问题
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/13374861.html
Copyright © 2011-2022 走看看