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則須要
或者