Django项目bloguser之唯一约束、登录

一,用户名注册唯一约束。

1,数据库唯一(主键约束)。

 a,在models.py BlogUser类里,给username加上唯一属性:

     username=models.CharField(max_length=30,unique=True)
  b,在views.py的registe里加异常处理,如果数据库已有此用户名报错,则做异常处理:
    try:
         blogUser.save()#保存注册的用户名和密码
         return redirect(reverse('user:show',args=[blogUser.id]))
    except :
         return render(request,'bloguser/add.html',{'user':blogUser,'error':'用户名重复'})
2,代码约束限制用户名重复
  a,在bloguser/urls.py里加上hasname路径:path('hasname',hasname)
  b,在bloguser/views.py里定义一个hasname方法,与数据库对接。
     def hasname(request):
         blogUser =BlogUser.objects.filter(username=request.POST.get('username'))
         if len(blogUser)==1:
            return HttpResponse("很遗憾,此用户名已占用")
         else:
            return HttpResponse("恭喜你,可以注册使用")
  c,在注册的页面编辑form表单:
     <form  method="post">
        {% csrf_token %}
        用户名:<input type="text" value="{{ user.username }}" name="username"><span id="msg">{{ error }}</span><br />
        密码:<input type="password" name="pwd"><br />
        <input type="submit" value="注册">
    </form>
    使用jQuery-3.3.1,实现在不刷新页面的情况下与数据库的交互。jQuery的文件放在static里。
    <script type="text/javascript" src="/static/js/jquery-3.3.1.js"></script>
    <script>
        $(function () {
            $('input[name="username"]').blur(function () {
               var name = $(this).val()
               var csrf = $('input[name="csrfmiddlewaretoken"]').val()
               //ajax
               data={"username":name,"csrfmiddlewaretoken":csrf}
               $.post('hasname',data,function (result) {
                     $('#msg'.text(result)
                })
            })
        })
    </script>
二,登录
1,先做好准备工作,把需要的注册页面,登录成功页面和路径写好。
   login.html  welcome.html  项目容器里的urls
from bloguser.views import *
urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/',include('bloguser.urls',namespace='user')),
    path('welcome',welcome,name='welcome'),
2,在views里编写login方法:
def login(request):
    if request.method =='GET':
        return  render(request,'bloguser/login.html',{})
 
  else:
      #登录逻辑代码
      username=request.POST.get('username')
      pwd=request.POST.get('pwd')
      blogUserSet=BlogUser.objects.filter(username=username,pwd=pwd)
      if len(blogUserSet)==1:
      #登录成功
          return render(request,'welcome.html',{})
        else:
           #登录失败
            return render(request,'bloguser/login.html',{'username':username,'error':'用户名或密码不正确'})

3,bloguser/urls.py里的路径:

path('login',login,name='login'),
path('logout',logout),
login.html:
<form action="" method="post">
    {% csrf_token %}#指纹
    用户名:<input type="text" value="{{ username }}" name="username" /><span id="msg">{{ error }}</span><br/>
  密码:<input type="password" name="pwd" /><br/>
<input type="submit" value="登录">
</for
welcome.html:
welcome!!! {% if user != None %}{{ user.username }} <a href="user/logout">退出</a> {% else %}<a href="user/login">登陆</a> {% endif %}

4,到目前为止,我的登录虽然做成功了,但是还有问题和bug。比如登陆的数据如何保存和状态的保持等等,下一章则讲如何解决这个问题。。。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值