Django模块导入篇

Django基础

  1. urls.py 导入app中的视图函数

    from app名字 import views
  2. app.view视图函数中导入models.py中的类

    from app名字.models import models中的类
  3. urls.py中的路径导入(Django自动完成)

    from django.conf.urls import url
    # Django2.0替换写法
    from django.urls import path
  4. app.models.py中创建数据库要导入的models类(Django自动完成)

    from django.db import models
  5. 项目测试的脚本文件导入内容

    import os
    
    if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "UserSys.settings") import django
    django.setup()

Django模板语言

  1. 前端基础用法

    {{}}	变量相关
    {% %} 逻辑相关
  2. 过滤器

    基本语法: {{ value|filter_name:arg }}

    自定义filter

    1. 在项目目录下app目录中新建一个名字为templatetags的python package
    2. 在新建的包中新建一个py文件
    3. 在新建的py文件中导入,并编写自定义filter,自定义filter要使用@register.filter(name=xxx)装饰
    4. 在前端先加载文件再使用
    加载: {% load py_file %}
    使用: {{ value|filter_name:arg }}
    # py文件中的导入
    from django import template
    register = template.Library()
  3. csrf导入

    {% csrf-token %}
  4. 母板

    // 母板中定义页面专用的CSS块和JS块,方便调用
    {% block page_name %}
    {% endblock %} // 子页面继承母板定义的块
    {% extends '母板html文件' %}
    // 在子页面中使用
    {% block page_name %}
    {% endblock %}
  5. 组件的导入

    // 将独立的组件封装在一个独立的html文件中,调用直接通过
    {% include 'xxx.html' %}
  6. 静态文件导入

    // 导入
    {% load static %}
    // 使用
    {% static "images/hi.jpg" as myphoto %} // 直接当做路径参数添加
    <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" /> // 在外面添加路径
  7. simple tag导入

    # 后端定义,在自定义过滤器的py文件中定义
    @register.simple_tag(name="xxx")
    def xxx(a, b, c):
    return "{} + {} + {}".format(a, b, c)
    // 前端使用,先导入再使用
    {% load py文件 %} {# simple tag #}
    {% xxx "1" "2" "abc" %}
  8. inclusion tag导入

    # 后端定义,在自定义的python package中定义
    from django import template
    register = template.Library()
    # 定义tag函数前要加装饰器
    @register.inclusion_tag('html文件', name='xxx')
    def xxx(args):
    return data
    # 这里return的data数据是传至html文件中的,和render类似
    // 前端先导入,再使用
    {% load py文件 %} {# inclusion tag #}
    {% xxx args %}

Django路由系统

  1. urls.py中包含其他urlconfs文件

    from django.conf.urls import include, url
    url(r'^blog/', include('blog.urls'))
  2. url命名

    url(r'^home', views.home, name='取名'),  # 给我的url匹配模式起名为 home
    // 前端引用
    {% url '命名的名字' %}
    # 在视图函数view.py中的引用
    from django.urls import reverse
    reverse("index")
  3. 命名空间

    # 在urls.py中
    from django.conf.urls import url, include
    urlpatterns = [
    url(r'^app01/', include('app01.urls', namespace='app01')),
    # 通过include找到app01中的urls文件,放在命名空间app01中
    url(r'^app02/', include('app02.urls', namespace='app02')),
    ] # 在app01的urls.py中
    from django.conf.urls import url
    from app01 import views app_name = 'app01'
    urlpatterns = [
    url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
    ]
    # 这样在app01和app02中使用相同名称的view视图函数,就不冲突了

    使用规则

    1. 模板中使用

      {% url '命名空间名:name' args %}
    2. 在view视图函数中使用

      # 先导入再使用
      from django.urls import reverse
      reverse('命名空间:name', args)

Django Cookie

# 获取Cookie
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 设置Cookie
rep = HttpResponse(...)
rep = render(request, ...) rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...) # 删除Cookie
rep = HttpResponse(...)
rep.delete_cookie('key')
return rep

Django Session

# 获取、设置、删除Session中数据
request.session['k1']
request.session.get('k1',None) request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置 del request.session['k1'] # 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired() # 删除当前会话的所有Session数据
request.session.delete() # 删除当前的会话数据并删除会话的Cookie。
request.session.flush()
这用于确保前面的会话数据不可以再次被用户的浏览器访问
例如,django.contrib.auth.logout() 函数中就会调用它。 # 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
# Session的settings.py的配置
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
在CBV上加装饰器引入的模块
  1. 引入模块:from django.utils.decorators import method_decorator

  2. 加在CBV视图的get或post方法上

    from django.utils.decorators import method_decorator
    @method_decorator(装饰器函数名)
    # 方法函数
  3. 加在dispatch方法上

    from django.utils.decorators import method_decorator
    @method_decorator(装饰器函数名)
    # dispatch方法
  4. 直接加在视图类上,但method_decorator必须传 name 关键字参数

    from django.utils.decorators import method_decorator
    
    @method_decorator(装饰器函数名, name="方法名")
    # 类
设置csrf功能
# 引入模块
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator
'''
csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
'''
# 装饰器添加方法和上同
@method_decorator(csrf_exempt)
# 方法函数 @method_decorator(csrf_exempt, name='dispatch')
# 类,注意在类上加装饰器必须加在类中的dispatch方法上

AJAX对应导入模块

  1. 返回JSON数据的模块

    from django.http import JsonResponse
  2. 在ajax中传csrf-token的数据

    // 在$.ajax的data字段中添加csrf信息(前提:在页面上添加上一个{% csrf-token %})
    data: {
    "csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中
    }
  3. 利用ajax传文件

    $("#b3").click(function () {
    var formData = new FormData(); // 利用formdata对象传文件
    formData.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val()); // 将csrf信息添加到formdata对象中
    formData.append("f1", $("#f1")[0].files[0]);
    $.ajax({
    url: "/upload/",
    type: "POST",
    processData: false, // 告诉jQuery不要去处理发送的数据
    contentType: false, // 告诉jQuery不要去设置Content-Type请求头
    data: formData,
    success:function (data) {
    console.log(data)
    }
    })
    })

Django中间件

  1. 自定义中间件,导入模块

    from django.utils.deprecation import MiddlewareMixin
    # 在中间件中可使用的方法
    # process_request(self,request)
    # process_view(self, request, view_func, view_args, view_kwargs)
    # process_template_response(self,request,response)
    # process_exception(self, request, exception)
    # process_response(self, request, response)

Django form 表单组件

  1. 导入form模块

    from django import forms
  2. 定义一个form表单

    class RegFrom(forms.Form):
    pass
  3. 定义一个modelForm表单

    class RegFrom2(forms.ModelForm):
    class Meta:
    model = 'models.表名'
    fields = '__all__' # 应用所有
    # fields = ["字段1", "字段2"]
    # exclude = ["字段1", "字段2"] 除这里之外的字段
  4. 实例对象

    form_obj = RegForm()
    form_obj = RegForm(request.POST) # 获取数据
  5. 前端提交多个form表单

    from django.forms import modelformset_factory, formset_factory
    # 这些路由应该是等待添加到数据库中权限表里的数据
    AddFormset = formset_factory(rbac_forms.PermissionForm, extra=0)
    add_formset_obj = AddFormset(request.POST) #获取数据
    models.Permission.objects.bulk_create(objs) #批量创建
    # 前端必须有
    {{ add_formset_obj.management_form }}
  6. 方法

    form_obj.is_valid()    # 判断数据是否正确
    form_obj.save() # 对对象进行添加和修改,如果是对密码进行操作,且密码存储格式是密文,不能直接用这个

Auth认证

  1. 导入auth模块

    from django.contrib import auth
  2. 导入authenticate(request, **kwargs)方法

    from django.contrib.auth import authenticate
  3. 导入login(request, user)/logout(request)方法

    from django.contrib.auth import login, logout
  4. 导入login_requierd装饰器

    from django.contrib.auth.decorators import login_required
    # 装饰器的使用
    @login_required

    更改装饰器自动跳转网页

    # settings.py
    LOGIN_URL = '新的跳转地址'
  5. 扩展默认的auth表

    # 重构的类必须继承AbstractUser类
    # models.py
    from django.contrib.auth.models import AbstractUser
    # 重构的类 # settings.py配置
    AUTH_USER_MODEL = "app名.类名"

mark-safe导入

from django.utils.safestring import mark_safe

免除csrf_token验证的方法

  • 针对于FBV
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 这个函数不走认证
def user(request):
pass
#走post请求时,就可以免除验证了
  • 注释csrf之后单独验证

    from django.views.decorators.csrf import csrf_protect
    @csrf_exempt # 这个函数需要认证
    def user(request):
    pass
    #注释掉setting中的csrf,之后需要认证可以导入

如果是CBV则需要

或者

Django模块导入的更多相关文章

  1. django模块导入/函数/中间件/MVC和MTV/CSRF

    目录 一:模块导入 二:函数 三:中间件 四:MVC和MTV 五:csrf 一:模块导入 第一种:继承 这里的母版更像是一个架子,子板都是定义的内容(如果多个页面中 ,存在相同的页面:这样我们可以抽到 ...

  2. Python19/1/11--标签与过滤器/Django模块导入继承/静态文件配置

      1 模板语言之变量: -{{ }} 相当于执行了print -深度查询 . 如果是方法,不能加括号,不能传参数2 过滤器 {{ 变量|过滤器的名字:'参数' }} -add -default -s ...

  3. Django学习之六:Django 常用模块导入记忆

    Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls ...

  4. Python学习日记(十九) 模块导入

    模块导入 当文件夹中有这样一个自定义的command模块 在它的内部写下下列代码: print('这个py文件被调用!') def fuc(): print('这个函数被调用!') 然后我们在comm ...

  5. Go项目结构和模块导入

    Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...

  6. python 模块导入

    1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导 ...

  7. python 入门学习---模块导入三种方式及中文凝视

    Python 有三种模块导入函数 1. 使用import 导入模块 import modname : 模块是指一个能够交互使用,或者从还有一Python 程序訪问的代码段.仅仅要导入了一个模块,就能够 ...

  8. python成长之路【第十八篇】:python模块介绍、模块导入和重载

    一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非 ...

  9. isinstance和issubclass、动态模块导入、异常处理

    一.isinstance和issubclass isinstance:判断某个对象是否是某个类的实例,返回True或Flase issubclass:判断某个类是否是某个类的子类. 例如: class ...

随机推荐

  1. windows server2012搭建邮箱服务器+客户端界面(hmailserver+afterlogic)+批量创建邮箱

    1.简介 由于需要较多邮箱,如果去注册需要很多的手机号码去验证,一个人不可能买一堆的手机号,所以自己搭建一个邮箱服务器可以大批量的创建自己的邮箱账号和收发邮件. 2.安装部署hmailserver 下 ...

  2. 015 Linux 标准输入输出、重定向、管道和后台启动进程命令

    目录 1 三种标准输入输出 2 什么是重定向?如何重定向? (1)什么是重定向? (2)如何重定向? 3 管道符以及和它容易混淆的一些符号使用 (1)管道符 | (2)&和&& ...

  3. k8s笔记--驱逐与重调度,以及deschueduler的一次实验

    在Kubernetes中,调度是指将Pod放置到合适的Node上,然后对应的Node上的Kubelet才能够运行这些pod.调度器通过Kubernetes的监测机制来发现集群中新创建且尚未被调度的No ...

  4. CoaXPress 接口相机的控制方法--1

    GenICam 介绍 简而言之,GenICam 定义了一个通用的相机接口,使得应用程序的编写.相机的控制可以与具体的型号解耦,这样就可以设计出通用的软件完成对不同相机的控制.我们实际使用的CoaXPr ...

  5. PHP+mysql真题

    PHP+mysql真题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. [真题215] 按要求写出SQL实现. ...

  6. Solution -「CF 1056G」Take Metro

    \(\mathcal{Description}\)   Link.   有 \(n\) 个站台在一个圆环上,顺时针编号 \(1\sim n\),其中 \(1\sim m\) 号站台只能乘坐顺时针转的环 ...

  7. Solution -「LOCAL」人口迁徙

    \(\mathcal{Description}\)   \(n\) 个点,第 \(i\) 个点能走向第 \(d_i\) 个点,但从一个点出发至多走 \(k\) 步.对于每个点,求有多少点能够走到它. ...

  8. 论文解读(AGCN)《 Attention-driven Graph Clustering Network》

    Paper Information Title:<Attention-driven Graph Clustering Network>Authors:Zhihao Peng, Hui Li ...

  9. CentOS8安装启用telnet服务

    CentOS8默认只安装telnet的客户端,其服务端telnet-server由于安全原因由用户自主选择安装.下面为实践安装启动telnet-server,注意其与vsftp服务安装的异同. 1.查 ...

  10. JAVA8学习——深入浅出方法引用(学习过程)

    方法引用:method reference 先简单的看一下哪里用到了方法引用: public class MethodReferenceTest { public static void main(S ...