MVC、MTV、FBV、CBV、母版和继承:
cookie session
cookie的定义:
保存在浏览器上的一组组键值对 (请求头)
为什么要有?
http协议是无状态,每次的请求之间是相互独立的,没有办法保存状态。
Django中操作cookie
设置 set-cookie
reponse.set_cookie(key,value,max_age=6,path='/')
reponse.set_signed_cookie(key,value,salt='xxx',max_age=6,path='/')
获取
request.COOKIES request.COOKIES.get(key)
request.get_signed_cookie(key,salt='xxx',default='')
删除 set-cookie
reponse.delete_cookie(key)
session
保存在服务器上的一组组键值对,必须依赖cookie。
为什么要有session?
cookie保存在浏览器上,不太安全
大小个数收到限制
Django中的操作:
设置
request.session[key] = value
获取
request.session[key] request.session.get(key)
删除
request.session.pop(key)
del request.session[key]
request.session.delete() # 删除所有的session数据
request.session.flush() # 删除所有的session数据 和 cookie
其他:
request.session.set_expiry(value) # 设置
request.session.clear_expiried(value) # 清空已经失效的session数据
配置:
from django.conf import global_settings
SESSION_SAVE_EVERY_REQUEST = True # 每次请求都更新session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 浏览器关闭数据就失效
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 存在的位置
# 数据库 缓存 缓存+数据库 文件 加密cookie
路由
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/',include('app01.urls')),
url(r'^get_img/',views.get_img)
]
正则表达式
^ $ \w \d \S . [a-zA-Z0-9]{4} + ? * .*?
分组和命名分组 传参的方式 ?
url(r'^get_(img)/',views.get_img)
# 捕获的参数按照 位置传参 传递给函数
url(r'^get_(?P<name>img)/',views.get_img)
# 捕获的参数按照 关键字传参 传递给函数
路由分发
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/',include('app01.urls')),
url(r'^get_img/',views.get_img)
]
url的命名和反向解析
静态路由
url(r'^login/', views.login,name='login'),
反向解析
模板
{% url 'login' %} ——》 '/app01/login/'
py文件
from django.urls import reverse
reverse('login') ——》 '/app01/login/'
分组
url(r'^del_publisher/(\d+)/', views.del_publisher,name='del_pub'),
反向解析
模板
{% url 'del_pub' '1' %} ——》 '/app01/del_publisher/1/'
py文件
from django.urls import reverse
reverse('del_pub',args=('1',)) ——》 '/app01/del_publisher/1/'
命令分组
url(r'^del_publisher/(?P<pk>\d+)/', views.del_publisher,name='del_pub'),
反向解析
模板
{% url 'del_pub' '1' %} ——》 '/app01/del_publisher/1/'
{% url 'del_pub' pk='1' %} ——》 '/app01/del_publisher/1/'
py文件
from django.urls import reverse
reverse('del_pub',args=('1',)) ——》 '/app01/del_publisher/1/'
reverse('del_pub',kwargs={'pk':'1'}) ——》 '/app01/del_publisher/1/'
namespace
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/',include('app01.urls',namespace='app01' )),
url(r'^app02/',include('app02.urls',namespace='app02')),
]
{% url 'app01:del_pub' '1' %}
reverse('app01:del_pub',args=('1',))
MVC
M: model 模型 和数据库交互
V: View 视图 HTML
C: controller 控制器 业务逻辑 流程
MTV
M:model 模型 ORM
T: template 模板 Html
V: view 视图 业务逻辑
FBV: function based view 函数
CBV : class based view 类
定义:
from django.views import View
class AddPublisher(View):
def get(self,request,*args,**kwargs):
# 处理get请求的逻辑
return response
def post(self,request,*args,**kwargs):
# 处理post请求的逻辑
return response
def put(self,request,*args,**kwargs):
# 处理put请求的逻辑
return response
urls.py
url(r'^add_publisher/', views.AddPublisher.as_view()),
加装饰器
FBV
@login_required
def publisher(request):
CBV
from django.utils.decorators import method_decorator
# 加在某个方法上
@method_decorator(login_required)
def get(self, request, *args, **kwargs):
# 加在dispatch方法上
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
ret = super().dispatch(request, *args, **kwargs)
return ret
# 加在类上
# @method_decorator(login_required,name='get')
@method_decorator(login_required,name='dispatch')
class AddPublisher(View):
request:
request.method # 请求方法 GET POST
request.path_info # 路径 不包含ip和端口 也不包含参数
request.GET # url上携带的参数 {}
request.POST # form提交POST请求的参数 {} 编码类型是urlencode
request.body # 请求体 b''
request.FILES # 上传的文件 编码的类型是 enctype="multipart/form-data"
request.COOKIES # cookie的字典
request.session # session的数据
request.META # 请求头 小写 ——》 大写 HTTP_ - _> _
request.get_full_path() # 路径 不包含ip和端口 包含参数
request.get_signed_cookie() # 获取加密cookie
request.is_ajax() # 是否是ajax
response对象
HttpResponse('xxxx') # 返回字符串 Content-Type: text/html; charset=utf-8
render(request,'模板的路径',{}) # 返回一个页面
redirect('路径') # 重定向 状态码301 302 响应头 Location:路径
from django.http.response import JsonResponse
def get_data(request):
ret = {'name': 'alex', 'pwd': 'dsb'}
ret = [1,2,3]
return JsonResponse(ret,safe=False) # 非字典 可以被json序列化
模板中
变量 {{ }}
通过(.)取相应的内容
.索引 .key .属性 .方法
优先级: .key > .属性 或 .方法 > .索引
过滤器:
{{ 变量|过滤器 }} {{ 变量|过滤器:参数 }}
{{ kong | default:'没有传参' }}
标签
{% %}
for
{% for i in list %}
{{ i }}
{% endfor %}
if 不支持算数运算
{% if 1|add:1 > 0 %}
真
{% endif %}
if 不支持连续判断
csrf
{% csrf_token %} # form表单中有一个隐藏的input标签 name=‘csrfmiddlewaretoken’
母版和继承
母版:
模板,提取出多个页面公共部分放在一个母版中,定义上多个block块,让子页面重新复写。
继承:
{% extends ‘母版的名字’ %}
重写block块。
注意点:
1. {% extends ‘母版的名字’ %} 母版名字 的引号好带上 不带会当做变量
{% extends ‘母版的名字’ %} 上不要写内容
要替换母版的内容都写在block块中
定义多个block块, css,js
MVC、MTV、FBV、CBV、母版和继承:的更多相关文章
- diango中的MTV——FBV/CBV以及装饰器的复用问题解决
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- Day062--django--模板,母版和继承
1.MVC和MTV MVC C Controller : 逻辑的控制 M Model : 存取数据 V View : 信息的展示 MTV M : model ORM操作 T: Template 模板 ...
- python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag
一.昨日内容回顾 1.MVC和MTV框架 MVC: model 模型 存写数据 view 视图 给用户展示页面 control 控制器 负责调度 传递指令 MTV: M:model 模型 OR ...
- Django FBV/CBV、中间件、GIT使用
s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...
- 回顾基础知识,类,fbv,cbv
一 类中绑定方法的传参,不需要self class Foo(object): def __init__(self,name): self.name = name def foo(self,x): se ...
- Django FBV CBV以及使用django提供的API接口
FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...
- django FBV +CBV 视图处理方式总结
1.FBV(function base views) 在视图里使用函数处理请求. url: re_path('fbv', views.fbv), # url(r'^fbv' ...
- Django之WSGI 和MVC/MTV
一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...
- Django(母版和继承)
day66 参考:http://www.cnblogs.com/liwenzhou/p/7931828.html#autoid-2-3-6 内容回顾 1. 模板系统(字符串替换) ...
随机推荐
- WPF 3D Cube及点击交互
在WPF中构建一个简单的立方体比较容易实现,可参考资料也比较众多.比较麻烦的是处理点击交互. 我在WPF中用两种方式实现了3DCube,效果图如下: 方式一: 最常见的3D内容构建模式,结构如下图. ...
- python实现智能语音天气预报
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 飞奔的帅帅 PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- report for PA1
说明:最近特别忙,都没有时间写blog,好多遇到的问题都没能记下来,下面是PA1的报告主要记录了nemu debuger一些功能的实现方式和实现中遇到的问题,代替一下blog (申明:This is ...
- 编译原理之DFA最小化,语法分析初步
1.将DFA最小化: 状态转换图: 识别语言:b*ac*(da)*bb* 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 (1)正规式: S -> 0(1S+ ...
- C# Excel 读取导入数据库
使用Aspose.Cells组件. 表格第一行为表头合并,第二行为数据名称,从第三行开始数据. if (xtraOpenFileDialog1.ShowDialog() == DialogResult ...
- SQL Server如何找出一个表包含的页信息(Page)
在SQL Server中,如何找到一张表或某个索引拥有那些页面(page)呢? 有时候,我们在分析和研究(例如,死锁分析)的时候还真有这样的需求,那么如何做呢? SQL Server 2012提供了一 ...
- Office2019新增哪些功能
上一篇文章我们知道了office为什么没有2017/2018版本,那个是因为微软office是时隔三年一更新的软件,这不office2019就出来了.一款软件,只有不断的完善自身功能,进行不断的更新, ...
- celery配置
celery配置 celery的官方文档其实相对还是写的很不错的.但是在一些深层次的使用上面却显得杂乱甚至就没有某些方面的介绍, 通过我的一个测试环境的settings.py来说明一些使用celery ...
- 给OPi Zero Plus添加USB启动功能
为使OPi Zero Plus支持U盘启动,需要在板载的SPI Flash当中刷入uboot.在这个过程当中绕了很多弯路,特此记录 最终操作步骤见文末 网上的教程仅使用sudo modprobe sp ...
- java之工厂方法设计模式
工厂方法模式是设计模式中应用最广泛的模式.在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要.工厂方法模式就是解决这个问题,它通过面向对象的手法,将所要创建的具体对象创建工作延迟到了子 ...