day64 Pyhton 框架Django 07
day67
内容回顾
视图
1. CBV
定义
from django.views import View
class Addpub(View):
def get(self,request):
self.request
return response
def post(self,request):
return response
使用:
from app01 import views
url(r'^add_pub/',views.Addpub.as_view())
2. as_view()的流程:
1. Addpub.as_view()执行 ——》 view函数
2. 请求到来的时候,执行view函数:
1. Addpub(*。**)——》 self
2. self.request = request
3. 执行self.dispatch(request.*args,**kwargs) ——》 Addpub中有 执行自己的dispatch,没有执行父类的
1. 判断请求方式 http_method_names = [ 'get','post' ]
1. 允许:
通过反射获取到对应请求方式(get/post)对应的方法 ——》 handler
2. 不允许:
http_method_not_allowed —— 》 handler
2. 执行handler ——》 返回response响应
3. 加装饰器的方式
from django.utils.decorators import method_decorator
1. 直接加在方法上
@method_decorator(timer)
def get(self, request):
1. 加在dispatch方法上
@method_decorator(timer)
def dispatch(self, request, *args, **kwargs):
# start = time.time()
ret = super().dispatch(request, *args, **kwargs)
# print('所用时间:{}'.format(time.time() - start))
return ret
1. 加在类上
@method_decorator(timer, 'post')
@method_decorator(timer, 'get')
class AddPublisher(View):
4. request 对象
1. request .method ——》 请求方式 POST GET
2. request .GET ——》 url上携带的参数
3. request .POST ——》 POST请求提交的数据
4. request .body ——》 请求体
5. request .FILES ——》 上传的文件
1. enctype = 'mutlipart/form-data'
2. POST {% csrf_token %}
3. 使用文件对象 chunks()
6. request.path_info ——》 url路径 不包含IP和端口、参数
7. request.COOKIES
8. request.session
9. request.get_full_path() ——》 url路径 不包含IP和端口 包含参数
10. request.get_host() ——》 主机的ip和端口
11. request.is_ajax() ——》 是否是ajax请求
5. response对象
1. HttpResponse() ——》 返回字符串 Content-Type = 'text/html'
2. render(request,'HTML文件名',{ }) ——》 返回完整的HTML页面
3. redirect(‘要跳转的地址’) ——》 重定向 Location :地址
1. ret = HttpResponse('') ret['Location '] = ' 地址'
4. JsonRespinse(字典) JsonRespinse([] ,safe=False ) Content-Type = 'application/json'
路由
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/$', views.blogs),
# url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog),
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog),
]
正则
^ $ asd \d + ? * .
分组和命名分组
url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog), # 位置参数传参
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog), # 关键字传参
从URL上捕获的参数是字符串
include —— 路由分发
urlpatterns = [
url(r'^app01/', include('app01.urls')),
# url(r'^app02/', include('app02.urls')),
# url(r'^', include('app01.urls')),
]
urlpatterns = [
url(r'^publisher/', views.publisher),
# url(r'^add_publisher/', views.add_publisher),
url(r'^add_publisher/', views.AddPublisher.as_view()),
# url(r'^add_publisher/', views.view),
url(r'^del_publisher/(\d+)/', views.del_publisher),
url(r'^edit_publisher/', views.edit_publisher),
url(r'^test/', views.test), ]
今日内容
1. url命名和反向解析
from django.urls import NoReverseMatch, reverse
普通URL:
命名:
url(r'^blog/$', views.blogs, name='xxxxx'),
反向解析
视图中:
reverse('xxxxx') ——》 ‘/blog/’
模板中:
{% url 'xxxxx' %}
分组:
命名:
url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog, name='blog'),
反向解析
视图中:
reverse('blog',args=('2019','01')) ——》 ‘/blog/2019/01/’
模板中:
{% url 'blog' '2018' '12' %} ——》 /blog/2018/12/
分组:
命名分组:
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog, name='blog'),
反向解析
视图中:
reverse('blog',args=('2019','01')) ——》 ‘/blog/2019/01/’
reverse('blog',kwargs={'year':'2018','month':12}) ——》 ‘/blog/2018/12/’
模板中:
{% url 'blog' '2018' '12' %} ——》 /blog/2018/12/
{% url 'blog' year='2018' month='12' %} ——》 /blog/2018/12/
{% url 'blog' month='12' year='2018' %} ——》 /blog/2018/12/
2. namespace
url('app01/', include('app01.urls', namespace='app01')),
url('app02/', include('app02.urls', namespace='app02'))
视图:
reverse('app01:home')
模板
{% url 'app01:home' %}
ORM
类 ——》 表
对象 ——》 数据行
属性 ——》 字段
常用的字段
AutoField
IntegerField
BooleanField
CharField
DateTimeField
DateField
DecimalField
FloatField
字段和model的参数
见博客
必知必会13条
见代码
单表的双下划线
ret = models.Person.objects.filter(pk__gt=100) # greater than
ret = models.Person.objects.filter(pk__lt=103) # less than
ret = models.Person.objects.filter(pk__gte=100) # greater than equal
ret = models.Person.objects.filter(pk__lte=103) # less than equal
ret = models.Person.objects.filter(pk__in=[100,103])
ret = models.Person.objects.filter(pk__gte=100,pk__lte=103)
ret = models.Person.objects.filter(pk__range=[100,103])
ret = models.Person.objects.filter(name__contains='L')
ret = models.Person.objects.filter(name__icontains='L')
ret = models.Person.objects.filter(name__startswith='x')
ret = models.Person.objects.filter(name__istartswith='X')
ret = models.Person.objects.filter(name__endswith='x')
ret = models.Person.objects.filter(name__iendswith='X')
ret = models.Person.objects.filter(birth__contains='2019-01-24')
ret = models.Person.objects.filter(age__isnull=False)
day64 Pyhton 框架Django 07的更多相关文章
- pyhton框架Django之cookie和session
一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文 ...
- day63 Pyhton 框架Django 06
内容回顾 1.装饰器 装饰器:是一个闭包函数,在不改变原函数的代码和调用方式的基础上,给原函数增加功能. def wrapper(func): def inner(*args,**kwargs): # ...
- day62 Pyhton 框架Django 05
内容回顾 1.变量 render(request,'模板文件名',{ k1:v1 }) {{ k1 }} {{ list.0 }} {{ dict.key }} {{ dict.keys }} {{ ...
- day61 Pyhton 框架Django 04
内容回顾 1.django处理请求的流程: 1. 在浏览器的地址栏输入地址,回车发get请求: 2. wsgi模块接收请求: 3. 在urls.py文件中匹配地址,找到对应的函数: 4. 执行函数,返 ...
- day60 Pyhton 框架Django 03
day61 内容回顾 1.安装 1. 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 2. pycharm sett ...
- day58 Pyhton 框架Django 01
内容回顾 python基础 网路编程 并发编程 数据库 前端 osi7层 tcp/ip 5层模型 应用层 表示层 ...
- python运维开发(十七)----jQuery续(示例)web框架django
内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...
- Web框架——Django笔记
Web框架--Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django--MTV 1.创建Django程序 ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
随机推荐
- (高难度SQL)从产品表中找出相同前缀 (都云作者痴 谁解其中味)
--期盼值 找出AA,3;PDST,3;QPL-,3;TP-,2; --基本表 create table tb_product( id number(9,0) primary key, name nv ...
- 从架构到部署,全面了解K3s
Kubernetes无处不在--开发者的笔记本.树莓派.云.数据中心.混合云甚至多云上都有Kubernetes.它已然成为现代基础设施的基础,抽象了底层的计算.存储和网络服务.Kubernetes隐藏 ...
- c++基础 写二进制文件
问题描述 有许多数据待拟合,需要从 root 中提取出来,写成文本文件数据量过大,想转成二进制文件. 解决 #include "TString.h" #include " ...
- linux下redis安装部署
1.获取redis资源 进官网下载https://redis.io/download最新版本后将文件移到linux环境中 或者直接wget http://download.redis.io/relea ...
- python 3 continue 循环控制
- [程序员代码面试指南]递归和动态规划-排成一条线的纸牌博弈问题(DP)
题目 给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明.请返回最后获 ...
- 人人框架renren-security |小记(第一篇)
一丶首先介绍一下人人框架: 1.简介 renren-security | 轻量级权限管理系统 采用Spring.MyBatis.Shiro框架,开发的一套权限系统,极低门槛,拿来即用 支持分布式部 ...
- java安全编码指南之:堆污染Heap pollution
目录 简介 产生堆污染的例子 更通用的例子 可变参数 简介 什么是堆污染呢?堆污染是指当参数化类型变量引用的对象不是该参数化类型的对象时而发生的. 我们知道在JDK5中,引入了泛型的概念,我们可以在创 ...
- ava实现时钟小程序【代码】
其实这个程序并不难,主要是用Java 2D画图,弄一个线程,每隔一秒,依照时针分针秒针各自的速度重新计算它们走过的角度(相对12点方向顺时针偏离的角度),利用这个角度算出它们各自端点的坐标,重绘一次表 ...
- java.lang.NoSuchMethodError: org.springframework.util.Assert.isTrue(ZLjava/util/function/Supplier;)V
spring-data-redis 2的版本只支持spring5和spring boot2+,建议降低spring-data-redis版本 <!-- redis --> <depe ...