• 模板

    • 变量 {{ }}

    • 标签 {% %}

      • 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 %}路径/

          1. 静态文件相关(动态拿取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 变量

          1. 编写自定义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

          1. 自定义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

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

                  - 步骤
                      - app下创建templatetagspython
                      - 在包下写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

            • 条件

              • |

              • &

              • ~

        • 事务

          • 同生共死

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

            全部的步骤都成功才成功

            经典例子:银行转账

            代码实现:

            1. 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

  1.     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. 浅谈微信小程序对于房地产行业的影响

    前几日,我们曾经整理过一篇文章是关于微信小程序对于在线旅游业的影响的一些反思(浅谈微信小程序对OTA在线旅游市场的影响),近日由于生活工作的需要走访了一些房地产的住宅商品房,突然想到微信小程序对于房地 ...

  2. 利用 Python 批量修改文件名

    开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干! 1 函数介绍 1.1 os 模块 (1)os.lisdir() >>> import os >>> ...

  3. ssc项目Python爬虫心得

    ###今日心得 ####time.datetime 1.字符串格式到标准化格式:time.strptime(str, "%Y%m%d") 2.今天的标准化格式:today = da ...

  4. getContextPath和getRealPath的区别-----其实主要区别就是相对路径和绝对路径

    getContextPath和getRealPath的区别 其实主要区别就是相对路径和绝对路径 https://blog.csdn.net/zsmj_2011/article/details/4121 ...

  5. Python学习笔记 (2)变量、常量和数据类型

    变量 顾名思义,变量就是一个会变的量,用一个变量名表示,指向内存中一片区域,而指向的区域存的是什么,这个变量就是什么数据类型,和C/C++挺不一样的.变量数据类型可以通过赋值变来变去(这就叫动态语言, ...

  6. oracle 如何查看创建表等数据库对象时的DDL语句

    http://missyou4417.blog.163.com/blog/static/78905686201271041340284/ http://www.xifenfei.com/2012/05 ...

  7. GNS3和Cisco IOU搭建路由交换实验-IOU篇

    http://www.mamicode.com/info-detail-605879.html

  8. MYSQL常用的性能指标

    (1) QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql > show  global status like 'Questio ...

  9. Nginx 源码

    http://blog.sina.com.cn/s/articlelist_1834459124_1_1.html http://tengine.taobao.org/book/ https://gi ...

  10. Solid Edge如何制作爆炸图

    1 最方便的方式是自动爆炸 点击应用程式-"爆炸-涂彩-动画"   选择要爆炸的对象(默认是顶层组立件),要爆炸的距离(默认系统根据零件大小自动生成距离,你也可以手动设定距离)即可 ...