环境:win10+mysql8.0+django2.0+bootstrap3.7
源码已经上传至我的github,欢迎修改使用:django2.0登录系统
最终显示结果:
设计的主要逻辑从以下几个方面来考虑:
1.登录:分为get与post两种情况,post即为提交请求,此时进行数据验证,使用django自带的抽象authentication类,使用login和logout类进行登入与登出。
2.注册:填写信息,与models层相结合,将数据存入数据库。
3.进行页面跳转。
具体内容如下:
总目录如图,其中app--mysite的文件内容为:
这两个目录应该不需要解释,django的基本操作。不太清楚的话,可以看我专栏的其他文章。
编写model层(models.py)
这里需要说明以下,我编写model层,并不是直接继承的model.Model,而是继承的django自带的登录系统中的AbstractUse类,这是django为了方便做登陆系统,而高度抽象出来的一个基类,查看源码可以发现,其中已经包括了username,password,email等字段,所以你只需要再编写你所需要的字段即可。当然你也可以重写基类,根据python继承的原则,子类与父类相同的属性,父类会被子类给覆盖。
从图中可以看见,我在User类中,定义了一个子类class Meta,它的作用从名称中就可看出来,是详细的名称verbosename是具体名称,下面一个是复数,至于他们的作用,就是在admin后台管理系统中能够显示verbose的内容,比如当我输入的verbosename为666时,在admin.py中注册之后的站点表名(model类名)为666,而self.name,则是点击进入之后,你所想要显示的提示,比如我是self.name的话,那么他会显示为我每天记录的name字段。
继续点击进入即可看见,每个记录的详细内容:
编写forms.py表单层:
注意,表单层使用widget来添加表单属性,继承django.forms类,即可使用。
比如,如果你需要输入的是密码,那么,只需要在widget中加入forms.PassInput(attrs=({"class":""},{"id":""}))。
编写视图层(views.py)
视图函数这里,有几点需要注意,一是,我使用的是django的通用类视图,也就是继承了dajngo.views.generic中的View,generic中还有许多其他的类,它们都是基于View的。
编写url.py
什么叫跨站点攻击呢? 简单来说,就是跨站点请求伪造,当你登录一个网站时,会在你的浏览器上保存一个cookie,如果此时,你正好又去点击了一个不良网站,后台人员,便可以使用保存在你浏览器上的cooike以你的身份去做一些事情。
那么dajngo如何来防止这种,情况呢?
dajngo使用伪随机数来完成这个操作,使用起来很简单,只需要在表单只能加入{{csrf_token}},如
这时当我们在登录的时候,如下图,便会出现一串伪随机数。可以杜绝99%的csrf。
今天就说这么多啦~
全文结束,欢迎在评论区讨论~