简单账号密码验证登录
#views.py
from django.contrib.auth import authenticate,login as dlogin,logout
def login(request):
username = request.POST.get('username','')
password = request.POST.get('password','')
# 验证成功返回user对象 失败返回None
user_obj = authenticate(username=username,password=password)
if user_obj:
# 登录 login函数会在request中写入cookie sessionid等设置
# 页面模版语法可用 {% request.user.is_authenticate %}判断是否登录
dlogin(request, user)
# 退出登录 logout清除信息
logout(request)
自定义auth
setting配置
#settings.py
AUTHENTICATION_BACKENDS = ()
#views.py
from django.contrib.auth.backends import ModelBackend
class CustomBackend(ModelBackend)
def authenticate(self,username=None,password=None,**kwargs)
try:
# user是在django中设置的user models对像,默认为user
user = user.objects.get(username=userrname)
if user.check_password(password):
return user
设置页面登录访问
- 根据 request.user.is_authenticate() 返回值判断,false则redirect("/login/")
- 使用django
login_required()
装饰器,若未登录默认跳转"/accounts/login/"
,可通过settings中LOGIN_URL变量修改默认值 - 在urls.py对应的url中加入 login_required 函数,如下:
from django.contrib.auth.decorators import login_required
from django.views.generic import RedirectView # 路由层面重定向
app_name = 'user'
urlpatterns = [
# 也可以在对应的视图函数上添加@login_required装饰器
url(r'^account/index/$', login_required(TemplateView.as_view(template_name='user/index.html')), name='user_index'),
]
# 访问该页面如果未登录,跳转 settings.LOGIN_URL 并在login_url后添加以next为key以当前相对路径作值的参数。