[TOC]python
命令行建立超級用戶ajax
python manage.py createsuperuser
1. 建立用戶django
from django.contrib.auth.models import User # User.objects.create(username=username,password=password) # 不可用 密碼不是加密的 # User.objects.create_user(username=username,password=password) # 建立普通用戶 密碼自動加密 User.objects.create_superuser(username=username, password=password, email='lsewj@126.com')
2. 校驗用戶登陸狀態session
from django.contrib import auth # res = User.objects.filter(username=username,password=password) # 密碼沒法校驗 from django.contrib import auth # 必須傳用戶名和密碼兩個參數缺一不能 user_obj = auth.authenticate(request,username=username,password=password)
3. 保存用戶登陸狀態app
auth.login(request, user_obj) # 只要這句話執行了 後面在任意位置 只要你能拿到request你就能夠經過request.user獲取到當前登陸的用戶對象,加了sessionid
4. 判斷當前用戶是否登陸post
request.user.is_authenticated()
5. 校驗原密碼是否正確ui
request.user.check_password(old_password)
6. 修改密碼加密
request.user.set_password(new_password) # 必定要保存 request.user.save()
7. 註銷url
auth.logout(request)
8. 校驗用戶是否登陸的裝飾器spa
from django.contrib.auth.decorators import login_required # 局部配置 @login_required(login_url='/login/') def logout(request): auth.logout(request) return HttpResponse('註銷成功') # 全局配置 # 首先在settings.py文件中直接配置LOGIN_URL = '/login/' @ login_required def logout(request): auth.logout(request) return HttpResponse('註銷成功') # 若是全局配置了,局部也配置了,那麼以局部爲準
方式一
利用一對一外鍵字段關係
class UserDetail(models.Model): phone = models.CharField(max_length=32) user = models.OneToOneField(to='User')
方式二
利用繼承關係
在django.contrib.auth.models中有一個User類,它繼承了AbstractUser類
from django.contrib.auth.models import AbstractUser class Userinfo(AbstractUser): phone = models.BigIntegerField() register_time = models.DateField(auto_now_add=True)
# start.py import os import sys BASE_DIR = os.path.dirname(__file__) sys.path.append(BASE_DIR) if __name__ == '__main__': os.environ.setdefault('xxx', 'conf.settings') from lib.conf import settings print(settings.NAME)
# __init__.py import importlib from lib.conf import global_settings import os class Settings(object): def __init__(self): for name in dir(global_settings): if name.isupper(): setattr(self, name, getattr(global_settings, name)) module_path = os.environ.get('xxx') md = importlib.import_module(module_path) for name in dir(md): if name.upper(): setattr(self, name, getattr(md, name)) settings = Settings()
在post請求時會觸發 CsrfViewMiddleware 中間件
form表單post請求
在form表單中加入{% csrf_token %}
便可
ajax中post請求
方式一
如今頁面上書寫{% csrf_token %}
而後在發送ajax請求的時候,經過標籤查找獲取隨機字符串添加到data自定義對象
data:{'username': username, 'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val()}
方式二
data:{'username': username, 'csrfmiddlewaretoken': '{{ csrf_token }}'}
方式三 官網提供的文件
直接新建js文件拷貝代碼,導入便可
csrf_exempt
from django.views.decorators.csrf import csrf_exempt # 不校驗csrf #@csrf_exempt def index(require): return HttpResponse('index')
csrf_protect
from django.views.decorators.csrf import csrf_protect # 只校驗加裝飾器的方法 #@csrf_protect def index(require): return HttpResponse('index')
csrf_exempt
csrf_exempt這個裝飾器只能給dispatch裝才能生效
@method_decorator(csrf_exempt, name='dispatch') class MyIndex(views.View): # @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super().dispatch(request, *args, **kwargs) def get(self, request): pass def post(self, request): pass
csrf_protect
csrf_protect全部方式均可以