Django基础回顾与补充(79-80)
Django框架之回顾与补充(d79-80)
一 HTTP协议:(重点)
1 请求
-请求首行
-GET /index HTTP/1.1
-请求头部(在django框架中,可以从META中取出来)
-key:value------>\r\n分割
-请求体(post请求发的数据) -----\r\n\r\n
-往后台传数据的时候,有编码方式(urlencoded,form-data,json/text)
默认urlencoded---->name=lqz&name=18---->从POST中取出
-form-data---上传文件,数据在body体中的格式---->也从POST中取出
-json---->从POST中取不出来,只能从body中取出,然后反序列化
2 响应
-响应首行(用空格区分)
-HTTP/1.1 200 OK ---\r\n
-响应头
-key:value
-响应体
-html/css/js代码
二 web框架
-django:大而全
-flask:轻量级,第三方的插件
-tornado:异步非阻塞
-wsgi:Web Server Gateway Interface web服务网关接口---是一个协议
-django测试阶段用的:wsgiref
import socket
def server_run():
soc = socket.socket()
soc.bind(('127.0.0.1', 8008))
soc.listen(5)
while True:
conn, addr = soc.accept()
recv_data = conn.recv(1024)
----->django框架
路由层
模板层
模型层
conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
conn.close()
三 django框架所在位置:
from wsgiref.simple_server import make_server
def mya(environ, start_response):
# print(environ)
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'404']
class Test():
pass
test=Test()
if __name__ == '__main__':
myserver = make_server('127.0.0.1', 8011, test)
print('监听8010')
myserver.serve_forever()
四 django简介
-pip3 install django==1.11.09 -i 指定国内源
-安装成功后,会在script文件夹下多django-admin.exe
-用来创建django项目
-django-admin startproject 项目名字(到指定文件夹下)
-cd到项目目录下,可以创建app,可以运行项目,可以数据库迁移
-创建app:python3 manage.py startapp app的名字
-运行项目app:python3 manage.py runserver
-数据库迁移1:python3 manage.py makemigrations
-数据库迁移2:python3 manage.py migrate
五 mvc和mtv
-django 是mtv模式:
-M:model ---->模型
-T:Template --->模板
-V:view ---->视图
-mvc模式:
-M:model---->模型,数据库相关
-v:view----->模板---->页面相关
-C:controller--->控制器:url+view
本质上:MTV就是MVC
六 Django请求生命周期
详见博客
七 路由层
一 Django中路由的作用
-根据客户请求的路径,分发到不同的视图函数
二 简单的路由配置
-url('正则',函数,默认值,name)
url(r'^author_update/', author.author_update,{'id':1}),
三 有名分组,无名分组
-利用正则分组:
-有名分组:(?P<名字>\d+),分出的名字,会以关键字参数的形式,传到视图函数
-无名分组:(\d+)分出的名字,会以位置参数的形式,传到视图函数
四 路由分发
- url(r'^author_update/', include('子路由的路径')),
-可以传子路由的路径字符串----推荐这种
-可以传子路由的py文件
五 反向解析
-url(r'^author_update/', author.author_update,name='test'),
-视图函数重定向,或者模板中写死了路径
-可以用反向解析来动态生成路径
-视图层:(有参数)
-url=reverse('test',args=(参数一,参数二,))
-模板层:(有参数)
{%url 'test' 参数一 参数二%}
六 名称空间
-路径重命名,可能会重复,反向解析,就会出问题
-指定名称空间
-url(r'^author_update/',include('子路由路径',namespace='app01')),
-reverse('app01:test')
七 django2.0版的path
-re_path根url一样
-path是准确路径
-5个转换器:int,str,slug,path,uuid
-自定义转换器
class Test:
regex='正则'
def to_python(self,value):
逻辑处理
return value
def to_url(self,value)
return '%04d'%value
-使用:
-register_converter(converters.FourDigitYearConverter, 'yyyy')
-<yyy:year>
八 伪静态:
8 视图层
-请求
-request对象:POST,GET(post提交数据,浏览器地址栏,也可以携带参数),method(大写),body(post提交的所有数据),path(路径),get_full_paht()-->(全路径,包含数据),FILES(前台传过来的文件,它是一个字典),META
-响应:
-render,HttpResponse,redirect
-JsonResponse-->往前台返回一个json格式数据(本质:继承了HttpResponse,封装了json)
-不能转换列表,想转换,safe=False
-编码方式
-cbv和fbv
基于类的视图cbv
-路由:url(r'^test/', views.Test.as_view()),
-视图:
class Test(View):
def dispatch(self, request, *args, **kwargs):
# 加点东西
# request=request.POST
response=super().dispatch(request, *args, **kwargs)
# 加点东西
return response
def get(self,request):
return HttpResponse('get')
基于函数的视图fbv
9 模版层
一 模版简介
渲染页面
二 模版语法之变量
-{{ 变量 }}
-{{深度查询用.}}
三 模版之过滤器
-自带过滤器
{{ 参数|过滤器名字:参数 }}
-date
-add
-length
-upper
-lower
-可以自定义过滤器
四 模版之标签(都要有结束)
-{% for %}
-循环字典:(在模板里,方法不能加括号)
{% for key,value in 字典.items%}
-forloop对象:parentloop,last,first,count,count0,revcountcount,revcount0
-{% if %}
-跟python if判断一样
-可以嵌套在for循环中
-{% elif%}
-{% else%}
-{% with%}
-重命名
五 自定义标签和过滤器
-先注册app
-在app下创建一个templatetags的模块
-在模块下新建一个py文件
-from django.template import Library
-register=Library()------>名字必须叫register
-标签:
-用装饰器装饰 @register.simple_tag
-过滤器
-用装饰器装饰 @register.filter
-过滤器最多只能传两个参数,标签可以传多个
-在模板中使用:
-{% load py文件名%}
-{{参数|自定义的过滤器:参数}}----->过滤器
-{% 自定义的标签名 参数一 参数二 %}----->标签
补充:inclusion_tag
-先注册app
-在app下创建一个templatetags的模块
-在模块下新建一个py文件
-from django.template import Library
-register=Library()------>名字必须叫register
-使用装饰器:@register.inclusion_tag('test.html')
-写个函数my_inclusion,返回字典
-模板里就能取到字典,渲染模板
-使用:
在模板中:{%load py文件名%}
{% my_inclusion 参数%}
六 模版导入和继承
-在模板中
-{% include '模板的名字'%}----->不要再以html开头,结尾了
-继承
-写一个母版,留几个盒子
-{%block 名字%}
{%endblock%}
-其他模板继承该母版,扩写盒子
{%extends '母版名字'%}
{%block 名字%}
写内容
{%endblock%}
-block.super--->可以显式盒子中原来有的东西
-多个盒子,跟写的位置无关
七 静态文件相关
- 基本配置<link rel="stylesheet" href="/static/mycss.css">
-static配置:
-{%load static%}
-{% static 'mycss.css'%}
-<link rel="stylesheet" href="{% static 'mycss.css'%}">
-get_static_prefix配置
-{% load static %}
-<link rel="stylesheet" href="{% get_static_prefix %}mycss.css">
10 模型层
-单表操作
-增:两种方式,create,对象.save()
-删:两种方式:queryset,对象都要删除方法
-修改:queryset的update方法,对象修改--->没有update,用save
-查:
-查询api
-模糊查询:基于双下划线
-多表操作
-增加:
一对一:authordetail=对象----authordetail_id=id
一对多:可以传对象,可以传id
多对多:
-add,remove,
-*args--可以传对象,可以传id
-clear()清空所有
-set
-传一个可迭代对象(可以传对象,可以传id)
-删除:如果设置了级联删除,就会级联删除
-查询
-正向:关联字段在那个表,从哪个表往外查,是正向
-反向:反过来
-基于对象
-正向按字段
-反向
-一对一 :表名小写
-其他:表名小写_set
-子查询,多条查询
-基于双下划线
-核心:__连表
-聚合:Count,Sum,Max.... aggregate
-分组:annotate
-总结:
value在前表示group by,在后,表示取值
filter在前,表示where,在后,表示having
-F函数,Q函数
-F函数,因为等号后面不能传字段,所以用F函数包裹一下
-Q函数:表示与& 或| 非~ 关系
-常用,非常用字段
-常用的记住,非常用的知道
-dateField类型:auto_now和auto_add_now
常用参数:
-级联删除:2.0以后,必须显示指定
-唯一性
-索引
元信息:
-重名名表名
-联合索引
-联合唯一
补充事务:
from django.db import transaction
with transaction.atomic():
# 两条create
pass
补充choice:
-在模型表中定义mychoice=((1,'男'),(2,'女'),(3,'其他'))
-在字段上用:dd = models.IntegerField(choices=mychoice)
-取对应的文字:
-在视图层:(get_字段名_display())
sex=author.get_dd_display()
补充defer和only(数据库优化)
only:只取我指定的字段,返回值是queryset里套对象,只是对象里只有指定的字段
defer:反过来
Django基础回顾与补充(79-80)的更多相关文章
- django知识点回顾与补充
一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...
- django基础回顾
1,web项目工作流程 1.1 了解web程序工作流程 1.2 django生命周期2,django介绍 目的:了解Django框架的作用和特点 作用: 简便.快速的开发数据库驱动的网站 Django ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
{Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) Django基础七之 ...
- Django【查询】 基础回顾与深入应用
官方Django3.2 文档:https://docs.djangoproject.com/en/3.2/topics/db/queries/ 本文大部分内容参考官方3.2版本文档撰写,仅供学习使用 ...
- 基于Django的Disqus如何支持每月80亿PV(转)
原文:基于Django的Disqus如何支持每月80亿PV 本文由 伯乐在线 - 贱圣OMG 翻译.未经许可,禁止转载!英文出处:Matt Robenolt.欢迎加入翻译小组. 现在我们Disqus能 ...
- Django基础(一):基础引用
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
随机推荐
- vue插件
Vue.js提供了插件机制,可以在全局添加一些功能.它们可以简单到几个方法.属性,也可以很复杂,比如一整套组件库. 注册插件需要一个公开的方法install,它的第一个参数是Vue构造器,第二个参数是 ...
- ccf-命令行选项-201403-3
分析: 这道题不是很难 用了一个split()函数 核心是: 对命令选项的判断 不要一个字符字符的判断 要一项一项的判断 比如ab:m: 分析步骤 (1) 读取一个字符(2)判断下一步是否有字符,下一 ...
- Python:从入门到实践--第六章--字典--练习
#1.人:使用一个字典来存储一个熟人的信息;包括姓,名,年龄和居住的城市.将字典中的每项信息都打印出来 friend = { 'last_name':'马', 'first_name':'脑壳', ' ...
- viewport定义,弹性布局,响应式布局及LESS和SASS框架应用
一,移动端宽度设置 viewport视图窗口,<meta name="viewport" content="width=device-width,initial-s ...
- 多管齐下显神威-2017逐浪CMS开启全新建站与WEB技术革命
培训班里说百遍,不如商业场景来检验. PS.AI.JS工具齐上阵,一统逐浪CMS全网中间件. 从逐浪软件创业团队成立.到逐浪CMS产品,以企业形式运营,历经十二载风雨,作为华文世界排名第一的dotNE ...
- YouTube数据:谁获得了最多订阅者?
原文来源: https://www.kaggle.com/roshan77/youtube-data-who-got-the-most-subscribers 介绍: Python笔记 使用来自Soc ...
- Django学习笔记之验证和授权
验证和授权概述 Django有一个内置的授权系统.他用来处理用户.分组.权限以及基于cookie的会话系统.Django的授权系统包括验证和授权两个部分.验证是验证这个用户是否是他声称的人(比如用户名 ...
- 压力测试:系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高, ...
- delphi 多线程之System.TMonitor
三天不写代码就手生! 把测试代码记录下来. unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, S ...
- Win32-Application的窗口和对话框
Win32 Application,没有基于MFC的类库,而是直接调用C++接口来编程. 一.弹出消息窗口 (1)最简单的,在当前窗口中弹出新窗口.新窗口只有“YES”按钮. int APIENTRY ...