디렉토리
장고 인증 모듈
명령 줄은 슈퍼 유저를 만들 수 있습니다
python manage.py createsuperuser
공통 모듈 인증 방법
사용자를 작성하십시오
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='[email protected]')
사용자의 로그인 상태를 확인합니다
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. 저장 사용자 로그인 상태
auth.login(request, user_obj)
# 只要这句话执行了 后面在任意位置 只要你能拿到request你就可以通过request.user获取到当前登录的用户对象,加了sessionid
현재 사용자의 로그인 여부를 결정 (4)
request.user.is_authenticated()
원래 암호를 확인 5. 올바른지
request.user.check_password(old_password)
6. 암호 변경
request.user.set_password(new_password)
# 一定要保存
request.user.save()
7. 취소
auth.logout(request)
사용자가 기록 된 장식 여부 8.
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('注销成功')
# 如果全局配置了,局部也配置了,那么以局部为准
확장 AUTH_USER 필드
길
외래 키 필드의 사용 사이에 하나의 관계에 대한 한
class UserDetail(models.Model):
phone = models.CharField(max_length=32)
user = models.OneToOneField(to='User')
두 번째 방법
상속의 사용
클래스 AbstractUser을 상속 django.contrib.auth.models에서 사용자 클래스가있다
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()
csrf_token
포스트 요청 CsrfViewMiddleware 미들웨어를 게재 할 때
포스트 요청 양식을 형성
양식 형태로 참여하기 {% csrf_token %}
로
포스트 요청 아약스에서
길
쓰기에서 {% csrf_token %} 페이지
AJAX 요청은 사용자 정의 물체에 태그 룩업 랜덤 데이터 스트링에 의해 취득시 전송
data:{'username': username, 'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val()}
두 번째 방법
data:{'username': username, 'csrfmiddlewaretoken': '{{ csrf_token }}'}
파일 공식 웹 사이트는 세 가지 방법을 제공합니다
새로운 파일을 직접 복사됩니다 JS 코드를 도입 할 수있다
관련 장식 CSRF
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 장식에 FBV 및 CBV 차이
csrf_exempt
이 장식은 파견 장비하기 위해 적용 할 수 csrf_exempt
@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 될 수 있습니다