cookie session

cookie的定义:

  1. 保存在浏览器上的一组组键值对 (请求头)

  2. 为什么要有?

    http协议是无状态,每次的请求之间是相互独立的,没有办法保存状态。

    1. 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

  1. 保存在服务器上的一组组键值对,必须依赖cookie。

  2. 为什么要有session?

    1. cookie保存在浏览器上,不太安全

      1. 大小个数收到限制

    2. 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块,让子页面重新复写。

继承:

  1. {% extends ‘母版的名字’ %}

  2. 重写block块。

注意点:

 1. {% extends ‘母版的名字’  %}  母版名字 的引号好带上   不带会当做变量
  1. {% extends ‘母版的名字’ %} 上不要写内容

  2. 要替换母版的内容都写在block块中

  3. 定义多个block块, css,js

MVC、MTV、FBV、CBV、母版和继承:的更多相关文章

  1. diango中的MTV——FBV/CBV以及装饰器的复用问题解决

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  2. Day062--django--模板,母版和继承

    1.MVC和MTV MVC C Controller : 逻辑的控制 M Model : 存取数据 V View : 信息的展示 MTV M : model ORM操作 T: Template 模板 ...

  3. python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag

    一.昨日内容回顾 1.MVC和MTV框架 MVC:  model 模型 存写数据   view 视图 给用户展示页面 control 控制器 负责调度 传递指令 MTV: M:model 模型  OR ...

  4. Django FBV/CBV、中间件、GIT使用

    s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...

  5. 回顾基础知识,类,fbv,cbv

    一 类中绑定方法的传参,不需要self class Foo(object): def __init__(self,name): self.name = name def foo(self,x): se ...

  6. Django FBV CBV以及使用django提供的API接口

    FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...

  7. django FBV +CBV 视图处理方式总结

    1.FBV(function base views) 在视图里使用函数处理请求. url:        re_path('fbv', views.fbv),        # url(r'^fbv' ...

  8. Django之WSGI 和MVC/MTV

    一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...

  9. Django(母版和继承)

    day66 参考:http://www.cnblogs.com/liwenzhou/p/7931828.html#autoid-2-3-6 内容回顾     1. 模板系统(字符串替换)        ...

随机推荐

  1. JqueryOn绑定事件方法介绍

    JqueryOn绑定事件方法介绍 1. 简介 (1) On()方法在被选及子元素上添加一个或多个事件处理程序 (2) 在jquery 版本1.7起,on()方法是bind(),live()和deleg ...

  2. ES6 ... 展开&收集运算符

    ...展开&收集运算符,也就是说他可以干两件事情,展开和收集 一:收集,顾名思义把散列东西收集到一个地方,这个地方ES6规定收集在数组中 例如:下面函数fn将传递的参数收集在arg变量中,打印 ...

  3. Kotlin版Aspect入门篇

    介绍: AspectJ是一个面向切面编程的一个框架,它扩展了java语言,并定义了实现AOP的语法.在将.java文件编译为.class文件时默认使用javac编译工具,AspectJ会有一套符合ja ...

  4. 关于字符串的格式化----format与%

    格式化字符串一般有两种方法 1.%(d整数,s字符,f浮点数) 2.format 用处极为广泛且限制不多 注意:第一种对于数组的传递会报TypeError,所以必须传递数组 a = (1, 2, 3) ...

  5. Mac中 pip3 install mysqlclient 报错

    主要错误提示如下: ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use ...

  6. 常用的git和repo命令

    首先下图是git的流程图 相关概念 svn与git命令的对比 git常用命令 git log // 查看当前库的git log信息 git status ./ // 查看当前库的状态 git diff ...

  7. VMware Workstation虚拟机安装CentOS-7-Minimal经验分享

    本文主要为0基础的小白准备,有一定经验的大神请忽略.因为最近刚接触linux,在其中也是遇到无数的弯路,本着互惠互利原则,特写这个博客,希望后来人能少走点弯路,更快的进入状态.话不多说,上货. 一,首 ...

  8. 《HTTPS权威指南》读书笔记——PKI

    互联网公钥基础设施 基于可信的第三方机构(CA,certification authority)实现不同成员在不见面的情况下进行安全通信 订阅人 需要证书来提供安全服务的团体 登记机构(RA) 完成证 ...

  9. LeetCode刷题--整数反转(简单)

    题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 12 ...

  10. 【cf960G】G. Bandit Blues(第一类斯特林数)

    传送门 题意: 现在有一个人分别从\(1,n\)两点出发,包中有一个物品价值一开始为\(0\),每遇到一个价值比包中物品高的就交换两个物品. 现在已知这个人从左边出发交换了\(a\)次,从右边出发交换 ...