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 ...
随机推荐
- 测试那些事儿—软测必备的Linux知识(四)
1.文件权限管理 ls -l 显示的内容如下: 10个字符确定不同用户能对文件干什么 第一个字符:-表示文件,d表示目录,l表示链接 其余字符每3个一组(rwx),r-读,w-写,x-执行 第一组rw ...
- JavaScript 运动(缓冲运动,多物体运动 ,多物体多值运动+回调机制)
匀速运动 (当需要物体做匀速运动直接调用statMove函数) function startMove(dom,targetPosetion){ //dom : 运动对象,targetPositio ...
- 设计简单的VB程序
1.模拟对话程序 [程序源码] Option Explicit Private Sub Command1_Click() Text2.Text = "" Text1.Text = ...
- Qt 学习-----helloword
(参考:http://www.qter.org/portal.php?mod=view&aid=27&page=3) 1. 打开“文件→新建文件或项目”菜单项(也可以直接按下Ctrl+ ...
- css3实现条纹以及方格斜纹背景
CSS代码: .stripes { height: 250px; width: 375px; float: left; margin: 10px; -webkit-background-size: 5 ...
- Python 特殊方法
1 _int_ 定义在类中,创建类的实例的时候回先调用此方法,用于对该类的一些初始化(例如变量初始化) 2 _str_ def _str_(self): return "this is a ...
- 安装了低版本Jdk后eclipse无法打开的终极解决方法
环境jdk1.7.0_17,eclipse oxygen(2017年6月发布) 因为之前安装的是jdk1.8.0_144,所以eclipse的相关配置都修改成了jdk1.8的版本,然而,近期因为某些原 ...
- zoj 1649 bfs
Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M ...
- 2018.5.11 B树总结
小结 B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于 走右结点: B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键 字范围的子结点: 所有关键字在整颗 ...
- C#服务端Web Api
本教程已经录制视频,欢迎大家观看我在CSDN学院录制的课程:http://edu.csdn.net/lecturer/944