前言:
-
- 注册:
-
- 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 = name
play.password = word
return 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'] = username
request.session['word'] = password
else:
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,可以这样子写:
在首页视图函数那里加一条
这样如果name有值那就赋给denglu,如果没有就把‘游客’赋给denglu
然后传给前台在模板中使用,就可以看到啦
如图为登录和未登录的状态,后期如果想得到用户的其他信息,比如评论,文章什么的,只需要用这个session去取数据就行啦!