一,用户名注册唯一约束。
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。比如登陆的数据如何保存和状态的保持等等,下一章则讲如何解决这个问题。。。