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 %}