今天一天,从上午一二节的上胡大爷的spark课开始我就在弄django了,知道现在凌晨,今天完成了django的用户注册登陆功能,其中遇到了些困难,踩了一些坑特此记录,避免下次再入坑。
首先讲讲注册实现过程:再首页设置注册按钮,点击按钮执行views.py中定义的goregister方法,该方法只是返回一个注册信息的界面,得到这个注册界面之后,用户填写用户名密码邮箱等信息,填写完成,点击按钮提交,提交方式为post,在views.py中用delregister方法处理,在views.py中先定义了一个form的模型,模型包括字段username,password
这两个字段的名字要和前端注册页面的填写姓名密码元素的name属性保持一致,这样才能在delregister方法中将post的数据对应赋值给模型,在赋值给模型前,django的form类会检查你输入的内容和定义的username,password模型字段的要求是否一致,若不一致则在django清理数据的时候不能通过。这里小编踩了一个坑,掉进去了40多分钟,小编在前端页面定义了邮件,在form模型中也定义了email=forms.EmailFiled().然而在调试的时候在邮件框输入的是1@1,点击提交。总是提交不了,现象就是刷新了已填写的表单,需要重新输入内容,总是过不去,后来直到把email输入完整(1@qq.com)才通过,才执行成功,跳转到主页面。
这里还有一些需要注意的,填写完表单提交成功,说明第一轮数据检查成功,第二轮数据检查则是代码中的userform.is_valid(),检查数据是否合格,后端获取数据时(username=userform.cleaned_data['username])进行第三遍检查。都成功之后将用户的信息保存到数据库user=buyer.objects.create(username=username,password=password,email=email),user.save(),到这里用户的注册完成,也快到中午了,去饭吃了来,接着撸。饭吃了中午还有胡大爷的实验课,本来想逃的,结果结果结果,我们和蔼的胡大爷点名了,哎,只好去了。
12点了,接着实现用户登陆,登陆有一个登陆界面,用户输入用户名,密码提交登陆,输入之后提交表单,这里要说一下djnago提交表单有限制,必须在提交表单的时候在表单前面添加这段代码 {% csrf_token %}这段代码实干什么的呢,是为了防止跨站伪造请求攻击的,具体实现过程请请教度娘,加入这段代码之后提交表单就不会有403的拒绝状态码了
提交用户信息之后对用户名和密码进行判断,user=buyer.objects.filter(name__iexact=username,password__iexact=password) filter用于查找符合条件的对象,__iexact表时忽略大小写的准确查找。如果能找到,说明用户存在。登陆成功。这里还实现了一个功能,就是用户登陆成功过后,需要在页面上显示其姓名。这里的实现方法是在session中添加永和的姓名字段,再到前端页面中去获取显示。注意Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。配置需要在settings.py中配置MIDDLEWARE=['django.contrib.sessions.middleware.sessionmiddleware']django默认是配置好的。配置后就可以使用django了
已到了下午时分,继续,开发用户收藏功能,对于一篇文章,点击一次按钮收藏,再点击一次按钮取消收藏。当用户点击按钮时判断用户是否登陆,即判断request.session['username']是否存在,若不存在则提示用户登陆,若存在实现收藏功能把。这里小编是采用ajax实现的,有一个小坑,就是jquery版本对post的datatype的要求。若datatype为json,则在jquery1.4以上的版本对传输表单数据是json的格式要求非常严格,ajax中定义了一个点击事件的方法,方法内容为点击提交收藏信息,若后端执行成功,恰好前端也定义了success回调函数,后端执行错误则执行定义的error回掉函数。收藏功能完成之后,晚上尝试添加评论功能,在网上淘了一个html模板进行修改,打算明天在实现功能,好了今天就到这儿咯,嘻嘻 晚安世界