AI智能
改变未来

Django个人博客搭建–7–注册与登录

前言:

  • 注册:
  • 1.写一个存储用户信息的表
  • 2.先编写注册界面模板
  • 3.当我们给模板配置好路由之后,在视图函数处编写功能函数。
  • 登录:
    • 1.模板
    • 2.写视图函数

    要知道如何用django写出用户注册登录的代码,首先需要知道注册登录的原理,这里拿最简单的注册登录方式来解释
    1.注册
    简单来说,注册就是把数据写入数据库

    1. 输入用户名,密码,确认密码
    2. 一般情况下,如果密码和确认密码一样,则把用户名和密码存入数据库
    3. 但是这里我们需要验证一下用户名是否已经在数据库中存在,如果存在则跳回页面重新注册,如果不存在则确保两次输入的密码一致,然后存入数据库

    2.登录

    登录可以理解为把数据库里的数据拿出来显示

    1. 输入用户名,密码
    2. 如果用户名在数据库中存在,则判断密码是否一致
    3. 如果用户名在数据库中不存在,则跳回页面

    注册:

    我的首页导航条有一个登录按钮,点进去到达登录界面,可选择注册或者放弃登录:


    这是我的注册页面

    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去取数据就行啦!

    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » Django个人博客搭建–7–注册与登录