urls.py 导入app中的视图函数javascript
from app名字 import views
app.view视图函数中导入models.py中的类html
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自动完成)java
from django.db import models
项目测试的脚本文件导入内容python
import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "UserSys.settings") import django django.setup()
前端基础用法ajax
{{}} 变量相关 {% %} 逻辑相关
过滤器数据库
基本语法: {{ value|filter_name:arg }}
自定义filterdjango
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 %}
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)
# 获取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
# 获取、设置、删除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,默认修改以后才保存(默认)
引入模块: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="方法名") # 类
# 引入模块 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方法上
返回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) } }) })
自定义中间件,导入模块
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)
导入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模块
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名.类名"
from django.utils.safestring import mark_safe
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则须要
或者