django-auth組件的註冊登錄
阿新 • • 發佈:2018-05-23
返回 include href set errors BE .post welcome ren
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,]) # 判斷用戶是否有權限列表中的某個權限 ‘‘‘
django-auth組件的註冊登錄