• 模板

    • 变量 {{ }}

    • 标签 {% %}

      • if elif else

      • for empty forloop()

      • with...as

      • csrf_token

    • 过滤器

      • default

      • length

      • add

      • data Y-m-d H:i:s 也可以在settings配置全局 DATATIME_FORMAT = ‘Y-m-d H:i:s’ USE_10N=False

      • filesizeformat

      • slice

      • safe 跨站脚本攻击

      • truncatechars 截断

    • 组件 一小段代码段

      • include html文件

    • 母版和继承

      • 母:block 名字 占位置 css/js/content

      • 子:entends base.html第一行 block 名字 进行生效

    • 静态文件相关

      • {% load static %} {% static ‘路径’ %}

      • {% load static %} {% get_static_prefix %}路径/

        • 静态文件相关(动态拿取STATIC_URL配置的名字)
                -
                    {% load static %}
                    <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
                     
                    引用JS文件时使用:
                    {% load static %}
                    <script src="{% static "mytest.js" %}"></script>
                     
                    某个文件多处被用到可以存为一个变量
                    {% load static %}
                    {% static "images/hi.jpg" as myphoto %}
                    <img src="{{ myphoto }}"></img>

                - get_static_prefix
                    {% load static %}
                    <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />
                     
                    或者
                    {% load static %}
                    {% get_static_prefix as STATIC_PREFIX %}

                    <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
                    <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />
    • 自定义 filter|simple_tag |inclusion_tag

      • filter 变量

        • 编写自定义filter

                 
                        from django import template
                        register = template.Library()


                        @register.filter
                        def fill(value, arg):
                            return value.replace(" ", arg)


                        @register.filter(name="addSB")
                        def add_sb(value):
                            return "{} SB".format(value)
                     
                    - 使用自定义filter

                        {# 先导入我们自定义filter那个文件 #}
                        {% load app01_filters %}

                        {# 使用我们自定义的filter #}
                        {{ somevariable|fill:"__" }}
                        {{ d.name|addSB }}
      • simple_tag

        • 自定义simple_tag
                和自定义filter类似,只不过接收更灵活的参数。

                定义注册simple_tag
                @register.simple_tag

                @register.simple_tag(name="plus")
                def plus(a, b, c):
                    return "{} + {} + {}".format(a, b, c)

                使用自定义simple_tag
                {% load app01_demo %}

                {# simple tag #}
                {% plus "1" "2" "abc" %}
      • inclusion_tag

        • inclusion_tag
                - 多用于返回html代码片段

                - 步骤
                    - 在app下创建templatetags的python包
                    - 在包下写py文件 mytags
                    - 编辑文件
                        - from django import template
                        - register = template.Library()

                    - 定义函数
                        - 可接受参数
                        - 返回一个字典
                    - 函数加装饰器
                        - @register.inclusion_tag('result.html')

                示例:

                    templatetags/my_inclusion.py

                     
                        from django import template

                        register = template.Library()


                        @register.inclusion_tag('result.html')
                        def show_results(n):
                            n = 1 if n < 1 else int(n)
                            data = ["第{}项".format(i) for i in range(1, n+1)]
                            return {"data": data}
                 
                    templates/result.html

                        <ul>
                          {% for choice in data %}
                            <li>{{ choice }}</li>
                          {% endfor %}
                        </ul>
                     
                    templates/index.html
                         
                        <!DOCTYPE html>
                        <html lang="en">
                        <head>
                          <meta charset="UTF-8">
                          <meta http-equiv="x-ua-compatible" content="IE=edge">
                          <meta name="viewport" content="width=device-width, initial-scale=1">
                          <title>inclusion_tag test</title>
                        </head>
                        <body>

                        {% load my_inclusion %}

                        {% show_results 10 %}
                        </body>
                        </html>
  • 视图

    • FBV和CBV

    • CBV流程

      • as_view()->view方法->dispatch

    • 加装饰器的方法

      • csrf相关的两个装饰器,只能加在dispatch上面

      • FBV 普通加法 ​ @wrapper ​ def test()

      • CBV from django.utils.decorators import method_decorator

      1. 加在方法上 @method_decorator(timer) ​ def get(self, request): ​

      2. 加在dispatch上 @method_decorator(timer) ​ def dispatch(self, request, *args, **kwargs)

      3. 加在类上 ​ @method_decorator(timer,name='post') ​ @method_decorator(timer,name='get') ​ class AddPress(View):

    • request

      • 属性

        • method

        • GET url数据

        • POST 数据

        • FILES 文件

        • path_info 获取路径 不包括参数 ip和端口

        • body 真正的数据存放的位置(bytes类型的request),POST的数据就是在body中提取出来的

      • 方法

        • get_full_path() 获取路径和参数 不包括ip和端口

        • get_host() ip 端口

        • is_ajax()

    • response

      • 三件套

      • ajax不能redirect对象。返给前端自己跳转=======HttpResponse。JsonResponse

  • 路由

    • urlpatterns=[]

    • 正则表达式 2.0 re_path = 1.0 url

    • 分组和命名分组

      • 分组:加括号,括号内容按位置参数传给视图

      • 命名分组(?<name> ) 关键字参数

      • 传的都是字符串

    • 参数

      • {}字典形式传给视图(可以看成默认参数)

    • include 路由分发

      • namespace

    • URL命名和反向解析

      • reverse

      • 灵活

        • url起名字

          • 视图:reverse(’名字‘)

          • {% url '名字' %}

        • 传参数

          • 视图:reverse(''名字'',args=(), kwargs=())

          • {% url '名字' 参数1' ''year= '2018' %}

    • namespace

      • Include(url,namespace='namespace名字')

        • url起名字

          • 视图:reverse(’namespace名字:名字‘)

          • {% url 'namespace名字:名字'%}

        • 传参数

          • 视图:reverse(''namespace名字:名字'',args=(), kwargs=())

          • {%url 'namespace名字:名字' '参数1' ''year= '2018' %}

  • ORM

    • 对象关系映射

      • 字段类型

        • CharFiled

      • 参数

        • primary_key

        • choise·

    • 查询

      • 13种方法

        • all

        • filter

        • get

        • exclude

        • order_by

        • reverse

        • distinct

        • first

        • last

        • count

        • exist

        • values

        • values_list

      • 单表的双下方法

        • gt

        • lt

        • in

        • range

        • isnull

        • contents

        • icontents

        • starswith

        • endswith

        • __year

        • __day

        • __mounth

      • 外键的查询

        • 外键写在多的一方

        • 外键_id

        • 反向查询 表名_set 管理对象

      • 多对多的查询

        • ManyToMany

        • 会自动生成第三张表

        • 反向查询 表名_set 管理对象

          • 管理对象的方法

            • add(id)

            • remove(id)

            • set(列表)

            • clear()

        • update和save

          • update是指定的一个字段

          • save是所有

      • 高级操作

        • 聚合和分组

          • 聚合

            • aggregate

            • Max, Min, Avg, Sum,Count

          • 分组

            • annotate

        • F和Q

          • F

            • 字段之间的比较和操作

          • Q

            • 条件

              • |

              • &

              • ~

        • 事务

          • 同生共死

          • 把一些列的操作(步骤)当作一个事务

            全部的步骤都成功才成功

            经典例子:银行转账

            代码实现:

            import os

            if name == 'main': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings") import django django.setup()

            import datetime
            from app01 import models

              try:
                  from django.db import transaction # 事务
                  with transaction.atomic(): # 里面是执行的所有步骤
                      new_publisher = models.Publisher.objects.create(name="火星出版社")
                      models.Book.objects.create(title="橘子物语", publish_date=datetime.date.today(), publisher_id=10) # 指定一个不存在的出版社id
              except Exception as e:
                  print(str(e))
  • cookie和session

    • cookie

      • 保存在浏览器的一组组键值对

      • 是浏览保存的,浏览器可以拒绝

      • 在Django中操作

        • 设置:HTTPResponse对象设置 res.set_cookie

          • 过期时间

          • 就还有一中加盐的cookie

        • 获取

          • request.COOKIES

          • 加盐有加盐的方法

        • 删除

          • request.clear_cookie()

    • session

      • cookie有限制不安全就用session

      • session是放在服务端的键值对

      • 设置

        • 字典的方式设置

        • setdefault

      • 获取

      • 删除

        • delate

        • flush

      • 设置session的超时时间

        • set_expiry()

      • 清除所有的过期session

        • clear_expired() 在Django_session表中删

      • 配置

        • 可以存在不同的地方 引擎

          • 在settings中配置

  • 中间件

    • 一个类

    • 在全局范围类处理请求和响应的钩子

    • 继承类MiddlewareMixin

    • 五中方法

  • ajax

    • 异步的局部刷新的数据库比较小

    • js的技术

    • 给服务器发请求交互的技术

    • 上传文件

      • FormData对象

      • 注意两个对象

        • processDate:false

        • contentType:false

      • csrf的保护机制

      • 流程

        • cookie中的值与process_request 和process_view 中的值作比较

      • 方式

        • {%csrf_tocken%}

        • 补充两个装饰器 from django.views.decorators.csrf import csrf_exempt, csrf_protect ​ csrf_exempt 给单个视图排除校验 ​ csrf_protect 给单个视图必须校验

          • process_request ​ 从请求的cookie中获取csrftoken的值 ——》csrf_token ——》request.META['CSRF_COOKIE'] ​ ​ process_view:

            1如果视图函数加上了csrf_exempt的装饰器 不做校验

            2如果请求方式是'GET', 'HEAD', 'OPTIONS', 'TRACE' 也不做校验

            3其他的请求方式做校验 ​ request.META.get('CSRF_COOKIE') —— 》 csrf_token

      • request_csrf_token = "" 从request.POST中获取csrfmiddlewaretoken对应的值

    • request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')

    • 从请求头中获取X-csrftoken 的值

    • request_csrf_token = request.META.get(settings.CSRF_HEADER_NAME, '')

    • request_csrf_token 和 csrf_token 做对比  
    • 如果校验成功 正常走
    • 如果校验不成功 拒绝

- 某一个请求(两种方式)

  - 数据发送
  - 请求头发送 X-CSRFToken

- 全局

  - 自己导入
  - 还需要加一个装饰器
  • Form

    • Django提供的Form组件

    • 定义一个类 from django import forms

    • 继承 forms.Form

    • 写字段

      • 参数

        • choises

        • validate

          • 正则

          • 函数

            • 不符合抛出异常

            • 判断条件没有返回值

        • widget

          • 插件

          • attrs 写样式

        • 钩子函数

          • 局部钩子

            • clean_字段名(self):

          • 全局钩子

            • clean(self):

  • auth

    • 是一个app Django写好的

    • 有一个中间件

    • 与session配合使用

    • 方法:

      • authenticate

      • login

      • logout

      • 跳转其他页面

        • from django.contrib.auth.decorators import login_required

        • 装饰器 login_require

        • 在settings中设置条转路径

      • 登录状态

        • is_authenticated

      • 密码

        • check_password

        • set_password + save

      • 创建用户

        • from django.contrib.auth.models import User 密码是明文的 User.objects.create(username=username,password=password) 密码是密文的 普通用户 User.objects.create_user(form_obj.cleaned_data) 创建超级用户 User.objects.create_superuser(email='',**form_obj.cleaned_data)

        • Is_staff 是否管理员

        • is_active 是否允许 用户登录

      • 扩展表

        • 继承 from django.contrib.auth.models import AbstractUser

        • 在settings中配置

          • AUTH_USER_MODEL = ‘app中对应表名’ # ‘app.表名(类名)’

          • Djan

Django 内容回顾的更多相关文章

  1. django内容回顾:

    Django 下载安装 命令行 pip install django==1.11.26 -i 源 pycharm 创建项目 命令行 django-admin startproject 项目名 pych ...

  2. python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)

    昨日作业讲解 1.图书管理系统 实现功能:book单表的增删改查 1.1 新建一个项目bms,创建应用book.过程略... 1.2 手动创建static目录,并在目录里面创建css文件夹,修改set ...

  3. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...

  4. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  5. 04 DRF内容回顾、用户登录 (含跨域) (vuex vue-cookie)、用户认证 (Auth认证)(拦截器)

    1.内容回顾 1.视图中常见的继承 2.频率访问控制源码 3.序列化,反序列化 2.初始化代码 1.后端代码:AuthView (1)目录结构 (2)urls (3)view (4)注释掉cors ( ...

  6. 基本数据类型-集合(set)_上周内容回顾(字符串_数字_列表_元组_字典_集合)

    上周内容回顾 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象 ...

  7. Netty源码分析第4章(pipeline)---->第7节: 前章节内容回顾

    Netty源码分析第四章: pipeline 第七节: 前章节内容回顾 我们在第一章和第三章中, 遗留了很多有关事件传输的相关逻辑, 这里带大家一一回顾 首先看两个问题: 1.在客户端接入的时候, N ...

  8. Python并发编程内容回顾

    Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ...

  9. JavaScript内容回顾

    <!DOCTYPE html> <!--JavaScript内容回顾--> <html lang="en"> <head> < ...

随机推荐

  1. LINUX-网络 - (以太网和WIFI无线)

    ifconfig eth0 显示一个以太网卡的配置 ifup eth0 启用一个 'eth0' 网络设备 ifdown eth0 禁用一个 'eth0' 网络设备 ifconfig eth0 192. ...

  2. 回车符号 ‘\r’ 的实际应用

    由于最近开始研究自动化测试 首先是自动定时去下载安装包,需要实时显示进度. 于是了解了进度条相关的方法. 作下记录. 区别 \r 表示将光标的位置回退到本行的开头位置 \n 表示光标从下一行的开头位置 ...

  3. 洛谷 1712 BZOJ 4653 [NOI2016]区间

    [题解] 先把区间按照未离散化的长度排序,保存区间长度,然后离散化区间端点.每次把区间覆盖的点的覆盖次数加1,如果某个点被覆盖次数大于等于m,就从前往后开始删除区间直到没有一个点被覆盖的次数大于等于m ...

  4. STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

    本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可. 1.键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样 ...

  5. poj 3253 Fence Repair(priority_queue)

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 40465   Accepted: 13229 De ...

  6. 洛谷——P1720 月落乌啼算钱

    题目背景 (本道题目木有以藏歌曲……不用猜了……) <爱与愁的故事第一弹·heartache>最终章. 吃完pizza,月落乌啼知道超出自己的预算了.为了不在爱与愁大神面前献丑,只好还是硬 ...

  7. BZOJ(2) 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4966  Solved: 2258[Submit][Sta ...

  8. - > 贪心基础入门讲解五——任务执行顺序

    分析: 本题可以抽象成,从一个整数开始,每次减去a,再加上b (a,b都是正数),要求每次操作都不产生负数. 针对本题a[i] = R[i], b[i] = R[i] – O[i],注意O[i] &l ...

  9. 用两种方法(递归和DP)实现了青蛙跳台阶

    做了这道题目: https://www.nowcoder.net/practice/8c82a5b80378478f9484d87d1c5f12a4?tpId=13&tqId=11161&am ...

  10. HDOJ 5402 Travelling Salesman Problem 模拟

    行数或列数为奇数就能够所有走完. 行数和列数都是偶数,能够选择空出一个(x+y)为奇数的点. 假设要空出一个(x+y)为偶数的点,则必须空出其它(x+y)为奇数的点 Travelling Salesm ...