django-auth組件的注冊,登錄,登出,及驗證是否已經登入。使用login的屬性


1.注冊:

1.創建User(django自帶的用戶model)的form對象

定義form驗證返回的錯誤提示信息

error_msg = {
    'username': {'required': '用戶名不能為空', 'max_length': '最大20','min_length': '至少6'},
    'password': {'required': '用戶名密碼不能為空', 'max_length': '最大20','min_length': '至少6'},
}

django,auth組件自帶的用戶model User 擁有username和password兩個字段

 
         
from django.contrib.auth.models import User

class
AuthRegisterForm(forms.Form): username = forms.CharField(label='用戶名', min_length=6, max_length=20, required=True, error_messages=error_msg['username']) password = forms.CharField(label='密碼', min_length=6, max_length=20, required=True, error_messages=error_msg['password']) def clean_username(self): username = self.cleaned_data["username"] users = User.objects.filter(username=username) print username print 'qeqwe' if users: raise forms.ValidationError("用戶名已經存在") return username

2.view視圖

    def post(self, request):
        forms = AuthRegisterForm(request.POST, request.FILES)
        print forms.errors
        if forms.is_valid():
            user = User.objects.create_user(**forms.clean()) # 使用的不是普通的create。  修改密碼:set_password 都是自動加密 sha2
        user.set_password('newpassword')
return HttpResponse('welcome haha...') return render(request, 'register.html', locals())

2.登錄:

 

class AuthLogin(View):
    """ 通過auth登錄 """
    def get(self, request):
        return render(request, 'login11.html')

    def post(self, request):
        username = request.POST.get("username")
        password = request.POST.get("password")
        print request.user
        # 使用auth組件的authenticate驗證登錄,成功返回一個用戶
        user = authenticate(username=username, password=password)
        if user:
            # 這個就是使用auth組件的登錄]
            if user.is_active: # 判斷用戶是否被激活
                login(request, user)
                # 如果調用login方法以后,
                # request對象就會激活user屬性,這個屬性不管登錄或者未登錄都是存在
                print request.user
                return HttpResponse("ok")
            else:
                message = "用戶不存在"
                return render(request, 'login11.html', locals())
        else:
            message = u"用戶或密碼出錯"
            print message
        return render(request, 'login11.html', locals())

 

3.注銷:

html

 

<a href="{% url 'work_include:auth_logout' %}">注銷</a>

 

view

class LoginOut(View):
    """ 登出 """
    def get(self, request):
        logout(request) # 會清除 cookie,seesion return HttpResponse("注銷成功")

 

4.驗證其他頁面是否登陸

 

class OtherPageAuth(LoginRequiredMixin, View):
    """
        用戶是否已經驗證
        from django.contrib.auth.mixins import LoginRequiredMixin
        指定局部的跳轉url: login_url = "/work/auth_login"
        全局: settings中 LOGIN_URL = '/work/auth_login'
    """
    login_url = "/work/auth_login" # 沒登錄跳轉到登陸界面,登錄則正常執行
    def get(self, request):
        print request.user
        return render(request, 'logok.html', locals())

 

ps: 使用login方法登錄,會激活request的user屬性,

   激活前request.user為AnonymousUser

   激活后request.user為 username,具有多個子屬性

        '''
        request.user.username # 用戶名
        request.user.email #郵箱
        request.user.groups #多對多的組
        request.user.user_permissions # 多對多的用戶權限
        request.user.is_staff # 是否是admin的管理員
        request.user.is_active # 是否激活,判斷該用戶是否可用
        request.user.is_superuser #是否是超級用戶
        request.user.last_login # 上次登錄時間
        request.user.is_authenticated # 是否驗證通過
        request.user.is_anonymous # 是否是匿名用戶
        request.user.set_password # 設置密碼,傳入原生密碼
        request.user.check_password # 檢查密碼
        request.user.has_perm #判斷用戶是否擁有某個權限
        request.user.has_perms([perms,]) # 判斷用戶是否有權限列表中的某個權限
        '''

 比如判斷是否通過驗證,通過驗證就不再顯示登陸注冊的樣式了

{% if not user.is_authenticated %}
    <a href="{% url 'auth:login' %}">登錄</a><span> /</span>
    <a href="{% url 'auth:register' %}">注冊</a>
{% else %}
    <a href="#" class="">{{ user.username }}</a>
{% endif %}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM