用户登录:
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的自带登录)