天天看点

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

前言:

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

要知道如何用django写出用户注册登录的代码,首先需要知道注册登录的原理,这里拿 最简单的注册登录方式来解释

1.注册

简单来说,注册就是把数据写入数据库

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

2.登录

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

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

注册:

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

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

这是我的注册页面

1.写一个存储用户信息的表

可以根据自己需求喜好,决定是否创建新的app,我这里是新创建了一个app,然后在model.py里写了一个简单的模型

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

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>
           

重点是这三个地方:

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

这是一个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的话,说明没有异常,则执行下面的代码:

把从前端收到的数据分别赋值。

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

这里是从数据库找与前端输入的相同的数据,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

然后传给前台在模板中使用,就可以看到啦

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

如图为登录和未登录的状态,后期如果想得到用户的其他信息,比如评论,文章什么的,只需要用这个session去取数据就行啦!