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框架的两种形式 ...
随机推荐
- SpringBoot程序启动时在Oracle数据库中建表充值
例子工程下载链接:https://files.cnblogs.com/files/xiandedanteng/gatling20200428-1.zip 需求:在工程启动时在Oracle数据库中建表. ...
- 20190923-02Linux文件目录类 000 010
pwd 显示当前工作目录的绝对路径 pwd:print working directory 打印工作目录 1.基本语法 pwd (功能描述:显示当前工作目录的绝对路径) 2.案例实操 (1)显示当前工 ...
- leetcode刷题-61旋转链表
题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2输出: 4 ...
- C Primer Plus 学习笔记
随笔: 1)C语言中%3d%2d什么意思? 格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式.在"%"和字母之间插进数字表示最大场 ...
- Ruby探微初步
我的导师,曾经对我说过,常规编程语言大抵不过顺序.条件.循环 接下来以Ruby为例,简单说说 控制语句 控制语句能让程序在某种条件下,改变执行顺序,或者只执行某一部分. 控制语句的分类 控制语句大致可 ...
- MySQL隐式转换的坑
MySQL以以下规则描述比较操作如何进行转换: 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做 ...
- Jackson精解第4篇-@JacksonInject与@JsonAlias注解
Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...
- 有关java反射的几个小方法的作用和区别
1.Class类中 getXXX()和getDeclaredXXX()的作用和区别: 前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类.后者获取所有的字段(or方法or ...
- IDEA环境配置里的一些error
1. idea添加edit configuration 没有tomcat图标 File->Setting->Build,Execution,Deployment-->Applicat ...
- python中不需要函数重载的原因
函数重载主要是为了解决两个问题: 1.可变参数类型 2.可变参数个数 并且函数重载一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函 ...