Djang 用户登录

用户登录:
1、表单提交
登录页面输入表单数据进行form提交(点击自动提交;自己编写doLogin()方法提交其中doLogin可以前台进行校验)
2、do_login后台业务逻辑处理:
a) 获取参数(post获取)
b) 基本参数校验,虽然前台会有校验,但后台也要有,避免跳过前台直接访问后台数据
c_补充) 先判断session中是否包含有login_user_name,如果有代表已经登录,直接跳转到首页
c) 根据userName和password查询数据库
d) 校验用户是否存在
e) 将用户的username存入session
f) 返回跳转到首页

修改:
1)跳转登录的view,需要加入判断是否已登录
2)首页的登录按钮,要进行验证

使用ajax进行登录:张森

# 首页
def welcome(request):
se = request.session
print(se)
login_user_name = se.get('login_user_name')
return render(request, "welcome.html", {'login_user_name': login_user_name})

# 登录页面
def login(request):
# 先判断是否登录,如果登录直接跳转到首页
if request.session.get('login_user_name'):
return redirect("/user/welcome")
return render(request, "login.html")


# 登录的业务逻辑
def do_login(request):
# 获取登录用户名、密码
userName = request.POST.get('userName')
password = request.POST.get('password')
# 基本参数校验

if not userName or len(userName.strip()) == 0:
return render(request, "login.html", {'message': '请输入用户名'})

if not password:
return render(request, "login.html", {'message': '请输入密码', 'userName': userName})
# 先判断是否登录,如果登录直接跳转到首页
if request.session.get('login_user_name'):
return redirect("/user/welcome")
# 数据库进行匹配
user = UserInfo.objects.filter(userName=userName.strip()).filter(password=password)
if not user:
return render(request, "login.html", {'message': '用户名和密码错误!',
'userName': userName, 'password':password})

# 成功就将用户名写入session
request.session['login_user_name'] = userName

# 设置过期时间
# 浏览器关闭失效
request.session.set_expiry(0)

return redirect("/user/welcome")

 

Session:如果是同一个浏览器打开的页面,session的key相同,那么后面写入的session会覆盖前面,如果是不同浏览器就不会冲突

https://docs.djangoproject.com/en/2.0/ref/contrib/auth/#module-django.contrib.auth.signals (Django的自带登录)

posted @ 2019-03-07 12:01  一念之间的抉择  阅读(303)  评论(0编辑  收藏  举报