Django 内容回顾
- 模板 - 变量 {{ }} 
- 标签 {% %} - 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 
 - 加在方法上 @method_decorator(timer)  def get(self, request):  
- 加在dispatch上 @method_decorator(timer)  def dispatch(self, request, *args, **kwargs) 
- 加在类上  @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 内容回顾的更多相关文章
- django内容回顾:
		Django 下载安装 命令行 pip install django==1.11.26 -i 源 pycharm 创建项目 命令行 django-admin startproject 项目名 pych ... 
- python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)
		昨日作业讲解 1.图书管理系统 实现功能:book单表的增删改查 1.1 新建一个项目bms,创建应用book.过程略... 1.2 手动创建static目录,并在目录里面创建css文件夹,修改set ... 
- python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)
		一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ... 
- django知识点回顾与补充
		一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ... 
- 04 DRF内容回顾、用户登录 (含跨域) (vuex vue-cookie)、用户认证 (Auth认证)(拦截器)
		1.内容回顾 1.视图中常见的继承 2.频率访问控制源码 3.序列化,反序列化 2.初始化代码 1.后端代码:AuthView (1)目录结构 (2)urls (3)view (4)注释掉cors ( ... 
- 基本数据类型-集合(set)_上周内容回顾(字符串_数字_列表_元组_字典_集合)
		上周内容回顾 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象 ... 
- Netty源码分析第4章(pipeline)---->第7节: 前章节内容回顾
		Netty源码分析第四章: pipeline 第七节: 前章节内容回顾 我们在第一章和第三章中, 遗留了很多有关事件传输的相关逻辑, 这里带大家一一回顾 首先看两个问题: 1.在客户端接入的时候, N ... 
- Python并发编程内容回顾
		Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ... 
- JavaScript内容回顾
		<!DOCTYPE html> <!--JavaScript内容回顾--> <html lang="en"> <head> < ... 
随机推荐
- 00 大王警语--be_a_new_gentleman
			大王博客:https://www.cnblogs.com/alex3714/ # 表面层次# 1,着装特体(服饰的牌子中高端)# 2,每天洗澡# 3,适当用香水# 4,女士优先# 5,不随地吐痰.不乱 ... 
- Maven学习总结(31)——Maven坐标详解
			Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等.为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就 ... 
- [luoguP1280] 尼克的任务(DP)
			传送门 原本想着 f[i] 表示前 i 个任务的最优答案,但是不好转移 看了题解后,发现是 f[i] 表示前 i 分钟的最优解,看来还是不能死脑筋,思维得活跃,一个思路行不通就换一个思路. 把 f 数 ... 
- uestc  1903
			#include<stdio.h> int main() { int n,m,i,t; scanf("%d",&t); while(t--){ scanf(&q ... 
- codevs2486 太鼓达人
			题目描述 Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_s ... 
- MYSQL中的数值型数据类型与字符串类型
			/* 数值型数据类型主要用来存储数字,包含的类型有: TINYINT.SMALLINT.MEDIUMINT. INT(INTEGER). BIGINT TINGINT占1个字节,SMALLINT占2个 ... 
- Oracle RAC load blance
			首先声明 本文基本是阅读 大话RAC 后的笔记.OK, 进入正题. Oracle 10g RAC中采取两种方式提供负载均衡.第一种是connection blance.在用户连接的时候,根据随机算法把 ... 
- 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。
			在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ... 
- LintCode-分糖果
			有 N 个小孩站成一列.每一个小孩有一个评级. 依照下面要求.给小孩分糖果: 每一个小孩至少得到一颗糖果. 评级越高的小孩能够得到很多其它的糖果. 需最少准备多少糖果? 您在真实的面试中是否遇到过这个 ... 
- VFL演示样例
			上篇文章向大家介绍了VFL的基本的语法点,假设对下面演示样例不熟的童鞋,能够前去參考.废话不多说.我们直接来看演示样例. 演示样例一 将五个大小同样.颜色不同的view排成一行,view间的间隔为15 ... 
