Django模块导入
Django模块导入篇
Django基础
urls.py 导入app中的视图函数
from app名字 import views
app.view视图函数中导入models.py中的类
from app名字.models import models中的类
urls.py中的路径导入(Django自动完成)
from django.conf.urls import url
# Django2.0替换写法
from django.urls import path
app.models.py中创建数据库要导入的models类(Django自动完成)
from django.db import models
项目测试的脚本文件导入内容
import os if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "UserSys.settings") import django
django.setup()
Django模板语言
前端基础用法
{{}} 变量相关
{% %} 逻辑相关
过滤器
基本语法: {{ 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()
csrf导入
{% csrf-token %}
母板
// 母板中定义页面专用的CSS块和JS块,方便调用
{% block page_name %}
{% endblock %} // 子页面继承母板定义的块
{% extends '母板html文件' %}
// 在子页面中使用
{% block page_name %}
{% endblock %}
组件的导入
// 将独立的组件封装在一个独立的html文件中,调用直接通过
{% include 'xxx.html' %}
静态文件导入
// 导入
{% load static %}
// 使用
{% static "images/hi.jpg" as myphoto %} // 直接当做路径参数添加
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" /> // 在外面添加路径
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" %}
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路由系统
urls.py中包含其他urlconfs文件
from django.conf.urls import include, url
url(r'^blog/', include('blog.urls'))
url命名
url(r'^home', views.home, name='取名'), # 给我的url匹配模式起名为 home
// 前端引用
{% url '命名的名字' %}
# 在视图函数view.py中的引用
from django.urls import reverse
reverse("index")
命名空间
# 在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视图函数,就不冲突了
使用规则
模板中使用
{% url '命名空间名:name' args %}
在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上加装饰器引入的模块
引入模块:
from django.utils.decorators import method_decorator加在CBV视图的get或post方法上
from django.utils.decorators import method_decorator
@method_decorator(装饰器函数名)
# 方法函数
加在dispatch方法上
from django.utils.decorators import method_decorator
@method_decorator(装饰器函数名)
# dispatch方法
直接加在视图类上,但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对应导入模块
返回JSON数据的模块
from django.http import JsonResponse
在ajax中传csrf-token的数据
// 在$.ajax的data字段中添加csrf信息(前提:在页面上添加上一个{% csrf-token %})
data: {
"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中
}
利用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中间件
自定义中间件,导入模块
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 表单组件
导入form模块
from django import forms
定义一个form表单
class RegFrom(forms.Form):
pass
定义一个modelForm表单
class RegFrom2(forms.ModelForm):
class Meta:
model = 'models.表名'
fields = '__all__' # 应用所有
# fields = ["字段1", "字段2"]
# exclude = ["字段1", "字段2"] 除这里之外的字段
实例对象
form_obj = RegForm()
form_obj = RegForm(request.POST) # 获取数据
前端提交多个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 }}
方法
form_obj.is_valid() # 判断数据是否正确
form_obj.save() # 对对象进行添加和修改,如果是对密码进行操作,且密码存储格式是密文,不能直接用这个
Auth认证
导入auth模块
from django.contrib import auth
导入authenticate(request, **kwargs)方法
from django.contrib.auth import authenticate
导入login(request, user)/logout(request)方法
from django.contrib.auth import login, logout
导入login_requierd装饰器
from django.contrib.auth.decorators import login_required
# 装饰器的使用
@login_required
更改装饰器自动跳转网页
# settings.py
LOGIN_URL = '新的跳转地址'
扩展默认的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模块导入的更多相关文章
- django模块导入/函数/中间件/MVC和MTV/CSRF
目录 一:模块导入 二:函数 三:中间件 四:MVC和MTV 五:csrf 一:模块导入 第一种:继承 这里的母版更像是一个架子,子板都是定义的内容(如果多个页面中 ,存在相同的页面:这样我们可以抽到 ...
- Python19/1/11--标签与过滤器/Django模块导入继承/静态文件配置
1 模板语言之变量: -{{ }} 相当于执行了print -深度查询 . 如果是方法,不能加括号,不能传参数2 过滤器 {{ 变量|过滤器的名字:'参数' }} -add -default -s ...
- Django学习之六:Django 常用模块导入记忆
Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls ...
- Python学习日记(十九) 模块导入
模块导入 当文件夹中有这样一个自定义的command模块 在它的内部写下下列代码: print('这个py文件被调用!') def fuc(): print('这个函数被调用!') 然后我们在comm ...
- Go项目结构和模块导入
Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...
- python 模块导入
1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导 ...
- python 入门学习---模块导入三种方式及中文凝视
Python 有三种模块导入函数 1. 使用import 导入模块 import modname : 模块是指一个能够交互使用,或者从还有一Python 程序訪问的代码段.仅仅要导入了一个模块,就能够 ...
- python成长之路【第十八篇】:python模块介绍、模块导入和重载
一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非 ...
- isinstance和issubclass、动态模块导入、异常处理
一.isinstance和issubclass isinstance:判断某个对象是否是某个类的实例,返回True或Flase issubclass:判断某个类是否是某个类的子类. 例如: class ...
随机推荐
- Go vs Java vs C# 语法对比
目录 1. 说明 2. 对比 2.1 关键字(keywords) 2.1.1 Go 2.1.2 Java 2.1.3 C# 2.1.4 小结 2.2 基本数据类型 2.2.1 Go 基本数据类型 2. ...
- 使用grpcui测试gRPC服务
grpcui类似Swagger UI,可以用来测试gRPC服务,使用起来特别简单. 其原理是通过自动发现gRPC服务协议(当然前提是gRPC服务暴露了Protobuf协议),然后启动一个带界面的Web ...
- 大话PHP设计模式笔记
针对PHP的设计模式进行总结记录. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻 ...
- Solution -「Gym 102979L」 Lights On The Road
\(\mathcal{Description}\) Link. 给定序列 \(\{w_n\}\),选择 \(i\) 位置的代价为 \(w_i\),要求每个位置要不被选择,要不左右两个位置至少被 ...
- 认识并学会使用spring boot
1,什么是SpringBoot SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品,用一些固定的方式来构建生产级别的spri ...
- sql注入之报错注入and boolean注入
1.sql注入之报错注入 正常传参,返回页面正常: 加入' 返回页面报错,出现"zhangsan"' 报错注入使用的函数 在这里我们使用 select updatexml(1,c ...
- 单网口RFC2544测试——信而泰网络测试仪实操
一.测试拓扑 拓扑说明 测试仪一个端口和DUT一个端口相连 DUT假设是一台交换设备,它能够把测试仪发送的流量直接转发回来 注意:要求DUT必须能够把收到的流量环回出来,否则没有办法测试 二.测试思路 ...
- 【C# IO 操作】C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
代码实现 在C盘添加一个文件夹,并在文件夹内部,新建一个文本文件,如图所示: 该文件夹下,新建一个文本文件,如图所示: 为文件添加完全控制权限: /// <summary> /// 为文件 ...
- Windows server 2008 R2 多用户远程桌面配置详解(超过两个用户)
转至:https://www.jb51.net/article/139542.htm 注意:一下是针对win2008 server r2的操作 1. 创建三个本地管理员测试用户 user01 use ...
- html 多种空格转义字符
记录一下,空格的转义字符分为如下几种: 1. &160#;不断行的空白(1个字符宽度) 2. &8194#;半个空白(1个字符宽度) 3. &8195#;一个空白(2个 ...