Django2 사용자 로그인 등록 기능 요약

21682 단어 Django총결산
이전의 로그인 등은 모두 자신이 데이터베이스 조회,form 구성 요소,cookie 및session 저장 상태를 이용하여 이루어진 것으로 비교적 시간이 걸린다.Django가 자체로 가지고 있는 로그인 인증은 우리가 신속하게 개발하는 데 도움을 줄 수 있다.
데이터베이스 섹션:
모델스에 있습니다.py가 테이블을 만들 때 Django가 자동으로 많은 테이블을 만들 수 있습니다. 그 중에서 하나의 테이블 이름은 다음과 같습니다. auth_user 이 테이블은 Django가 자체로 가지고 있는 사용자 테이블입니다. 이를 이용하여 로그인 인증을 실현할 수 있습니다. 이 테이블 필드에 어떤 것들이 있는지 먼저 보십시오.
Django Auth    User       

username:   
email:     
password:      
first_name: 
last_name: 
is_active:        。   True
is_staff:      。   False
is_superuser:       。   False
dat_joined:     。      。

모델스에서.py의 관련 작업:
from django.contrib.auth.models import User
'''      ,      '''
class UserInfo(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)   
    #    User      
    role=models.CharField(max_length=32)  #         ,    ,  ,  

여기에 디버깅용 데이터는 관리자를 통해 추가할 수 있고, 그 다음에 등록 기능으로 데이터를 추가할 수 있습니다
URL 섹션
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login',views.acc_login),
    path('logout',views.acc_logout,name="logout"), #      name   {% url 'logout' %}  url
    path('crm',views.crm),

]

settings.py 섹션:
LOGIN_URL="/login" #(            )

Views 섹션
from django.shortcuts import render,redirect
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
#

@login_required  #          ,   settings.py  LOGIN_URL="/login"  (      )
def crm(request):
    return render(request,"userinfo.html")
def acc_login(request):
    error_msg=' '
    if request.method=="GET":
        return render(request, "login.html")
    if request.method=="POST":
        username=request.POST.get("username")
        print(username)
        password=request.POST.get("password")
        print(password)
        user=authenticate(username=username,password=password)  #      ,     
        if user:
            print(user)        #username
            print(type(user))  #
            login(request,user)   #    ,  
            #   request.user=user          {{request.user}}
            return redirect(request.GET.get("next",'/crm'))    #http://127.0.0.1:8080/login?next=/crm
            #              ,         ,          
        else:
            print(user)        #None
            print(type(user))  #
            error_msg="        "
        return render(request, "login.html", {"error_msg":error_msg})
def acc_logout(request):
    logout(request)
    return redirect('/login')

HTML 섹션
userinfo.html
<body>
<div><a href="">{{ request.user }}a>div>
<div><a href="{% url 'logout' %}">  a>div>
body>

login.html
<body>
 <div class="container">

      <form class="form-signin" method="post" novalidate>
          {% csrf_token %}
        <h2 class="form-signin-heading">   h2>

        <input type="text" id="inputEmail" class="form-control" placeholder="username" name="username" required autofocus>

        <input type="text" id="inputPassword" class="form-control" placeholder="Password" name="password" required>
          <div><span STYLE="color: red">{{ error_msg }}span>div>
        <div class="checkbox">
          <label>
            <input type="checkbox" value="remember-me"> Remember me
          label>

        div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">  button>
      form>

    div> 

body>

요약: 1.Django 자체 User 테이블을 사용하면 자동 인증이 가능하며 User를 확장할 수 있습니다.
user=models.OneToOneField(User,on_delete=models.CASCADE) 

2. authenticate 활용 검증
from django.contrib.auth import authenticate,login,logout
user=authenticate(username=username,password=password,role=role)

3. 인증 통과login로 로그인
from django.contrib.auth import authenticate,login,logout
login(request,user)   #    ,  

4.logout로 탈퇴
 from django.contrib.auth import authenticate,login,logout
 logout(request)

5. login_required를 이용하여 다른 URL에 로그인 권한 요구 사항 추가
@login_required  #          ,   settings.py  LOGIN_URL="/login"  (      )
def crm(request):
    return render(request,"userinfo.html")

로그인 권한이 필요한 URL은 settings에 따라 접근합니다.py리LOGIN_URL에서 점프 점프 후 URL:
#http://127.0.0.1:8080/login?next=/crm

로그인 성공 점프에서 설정 가능:
return redirect(request.GET.get("next",'/crm'))

login 페이지에서 직접 로그인하면crm로 이동합니다. 다른 URL이면login으로 로그인하고 성공한 후에 다른 URL로 이동합니다.

좋은 웹페이지 즐겨찾기