前言:
- 注册:
- 1.写一个存储用户信息的表
- 2.先编写注册界面模板
- 3.当我们给模板配置好路由之后,在视图函数处编写功能函数。
- 1.模板
- 2.写视图函数
要知道如何用django写出用户注册登录的代码,首先需要知道注册登录的原理,这里拿最简单的注册登录方式来解释
1.注册
简单来说,注册就是把数据写入数据库
- 输入用户名,密码,确认密码
- 一般情况下,如果密码和确认密码一样,则把用户名和密码存入数据库
- 但是这里我们需要验证一下用户名是否已经在数据库中存在,如果存在则跳回页面重新注册,如果不存在则确保两次输入的密码一致,然后存入数据库
2.登录
登录可以理解为把数据库里的数据拿出来显示
- 输入用户名,密码
- 如果用户名在数据库中存在,则判断密码是否一致
- 如果用户名在数据库中不存在,则跳回页面
注册:
我的首页导航条有一个登录按钮,点进去到达登录界面,可选择注册或者放弃登录:
这是我的注册页面
1.写一个存储用户信息的表
可以根据自己需求喜好,决定是否创建新的app,我这里是新创建了一个app,然后在model.py里写了一个简单的模型
playObj = PlayerManager()
是注册自定义管理器,下面会说到
2.先编写注册界面模板
<form class=\"form-horizontal\" role=\"form\" action=\"{% url \'iyonghu:zhuce\' %}\" method=\"post\" style=\"margin-top: 5%\">{% csrf_token %}<div class=\"form-group\"><label class=\"col-sm-3 control-label\">用户名:</label><div class=\"col-sm-9\"><input type=\"text\" placeholder=\"name\" name=\"usersname\"></div></div><div class=\"form-group\"><label class=\"col-sm-3 control-label\">密码:</label><div class=\"col-sm-9\"><input type=\"password\" placeholder=\"password\" name=\"passsword\"></div></div><div class=\"form-group\"><label class=\"col-sm-3 control-label\">确认密码:</label><div class=\"col-sm-9\"><input type=\"password\" placeholder=\"again\" name=\"again\"></div></div><div class=\"form-group\"><div class=\"col-sm-offset-3 col-sm-9\"><button type=\"submit\" class=\"btn btn-primary\">确认注册</button><a href=\"{% url \'shouye\' %}\" style=\"margin-left: 5%\">放弃</a></div><div class=\"col-sm-offset-3 col-sm-9\"><p style=\"color: red\">{{ p }}</p></div></div></form>
重点是这三个地方:
这是一个form表单,通过
method=‘post’
把画圈这三个name所带的数据通过比较安全的方式发送出去。
3.当我们给模板配置好路由之后,在视图函数处编写功能函数。
def zhuce(request):if request.method == \'POST\':username = request.POST.get(\'usersname\')password = request.POST.get(\'passsword\')again = request.POST.get(\'again\')get_info = Player.playObj.filter(username=username)if get_info.exists():p = \'用户名已存在,请重新输入!\'return render(request,\'blogmuban/regsite.html\',{\'p\':p})else:if password == again:user = Player.playObj.createnew(name=username,word=password)user.save()p = \'注册成功,登录吧!\'else:p = \'注册失败,两次密码输入不一样!\'return render(request,\'blogmuban/regsite.html\',{\'p\':p})return render(request,\'blogmuban/login.html\',{\'p\':p})
如果后台收到的request.method是POST的话,说明没有异常,则执行下面的代码:
把从前端收到的数据分别赋值。
这里是从数据库找与前端输入的相同的数据,playObj是自己在model写的一个自定义管理器,就是自定义一个功能
class PlayerManager(models.Manager):def createnew(self,name,word):play = self.model()play.username = nameplay.password = wordreturn play
这里是自定义一个往数据库插入数据的功能
上面的filter函数是django自带的一个筛选功能,可以将key=value的值筛选出来
然后我们把拿到的数据复制给get_info,再判断他是否存在,如果存在则判断密码和确认密码是否相同。
如果这些验证都通过了,则调用自定义管理器刚写的创建新对象的功能,然后将数据存入数据库
自此,数据库里面便有了我们刚刚输入的数据,代表我们注册成功!
登录:
1.模板
登录的模板的道理跟注册的模板一样,只是少掉确认密码而已,不过要有也可以,只要在后面加一个判断功能就行了
2.写视图函数
def login(request):username = request.POST.get(\'username\')password = request.POST.get(\'password\')if request.method == \'POST\':user = Player.playObj.filter(username=username)if user.exists():if user[0].password == password:request.session[\'name\'] = usernamerequest.session[\'word\'] = passwordelse:p = \'密码错误,请重新输入!\'return render(request, \'blogmuban/login.html\',{\'p\':p})else:p = \'用户名有误,请重新输入!\'return render(request, \'blogmuban/login.html\', {\'p\': p})return redirect(\'/\')
还是一样,将前端拿到的数据进行赋值
利用filter方法遍历出
username=username
的对象列表赋值给user,由于这里得到的是一个列表所以我们用
user[0].password == password
来判断
这样子如果一切都验证通过,就把这些值交给缓存session,这样子方便我们前台调用,最后重定向到首页
如果我们想在首页看到我们刚刚存入个session,可以这样子写:
在首页视图函数那里加一条
denglu = request.session.get(\'name\',\'游客\')
这样如果name有值那就赋给denglu,如果没有就把‘游客’赋给denglu
然后传给前台在模板中使用,就可以看到啦
如图为登录和未登录的状态,后期如果想得到用户的其他信息,比如评论,文章什么的,只需要用这个session去取数据就行啦!