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. Azure AD Domain Service(二)为域服务中的机器配置 Azure File Share 磁盘共享

    一,引言 Azure File Share 是支持两种认证方式的! 1)Active Directory 2)Storage account key 记得上次分析的 "Azure File ...

  2. 从零开始, 开发一个 Web Office 套件 (3): 鼠标事件

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 对应的Github r ...

  3. MyBatis源码环境搭建

    之前研究mybatis都是参考前面学习的人的一些经验,并没有自己搭建源码环境进行.现在以mybatis3.4.6版本搭建,搭建过程中各种failed,下面大致记录环境搭建过程. 1.mybatis3. ...

  4. java 获取真实IP

    1.java代码 /** 获取客户端IP */ public static final String getClientIp(HttpServletRequest request) { String ...

  5. 分析HTTP请求以降低HTTP走私攻击HTTP数据接收不同步攻击的风险

    写在前面的话 HTTP/1.1自1991年至2014年,已经走过了一段很长的发展历程: HTTP/0.9– 1991 HTTP/1.0– 1996 HTTP/1.1 RFC 2068– 1997 RF ...

  6. kali linux中ifconfig命令不能使用的解决办法

    1.安装net-tools,因ifconfig属于net-tools,输入命令:   sudo apt-get install net-tools 记住加上sudo哦!4647c21ef50df33a ...

  7. PentestBox在win10里打不开工具 显示无系统命令的解决方法

    PentestBox详细安装过程:http://www.cnblogs.com/ESHLkangi/p/8336398.html 在使用PentestBox的时候出现了打不开工具的问题,最后看到一个大 ...

  8. excel仪表盘制作,商业智能仪表盘的作用

    ​商业仪表盘被称为管理驾驶舱的重要组成部分,无论是管理决策者,还是企业业务流程中的普通员工,都可以利用它来展示分析的结果,让决策更加快速准确,更快地推动业务流程的进展,提高工作效率. 一个明确地了解自 ...

  9. C#的泛型和Java的伪泛型

    C#的泛型和java的伪泛型,talk is cheap,show me the code   C#泛型 下面结果,C#里面会输出false,如果这个还不能真正的说明C#的泛型是真的泛型,那就看下面这 ...

  10. Linq连接和Sql Server连接

    最近在研究连接的时候,被困惑了