• MVC、MTV、FBV、CBV、母版和继承:


    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

  • 相关阅读:
    linux系统命令记录
    window下,nodejs 安装 http-server,开启命令行HTTP服务器
    前端学习记录2:设计稿分析
    前端学习记录1:开始
    如何做到让自己长时间精神专注?
    sublime使用
    nodejs 第一次使用
    收集好看的效果及互动页面
    转 如何赢得朋友和获得影响力
    转 scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
  • 原文地址:https://www.cnblogs.com/zhang-da/p/12061300.html
Copyright © 2020-2023  润新知