(2)执行映射文件生成数据表:
(1)登录注册登出视图函数框架编写:
(mucis/views.py文件~)
from django.views import View #使用类视图,要导入!
class LoginResponse(View):
def get(self,request):
return “登录页面”
def post(self):
“”"
登录逻辑
:return:
“”"
pass
class RegisterResponse(View):
def get(self, request):
return “注册页面”
def post(self):
“”"
注册逻辑
:return:
“”"
pass
“”"
微信公众号:孤寒者
欢迎关注,持续分享干货文章~
如有问题也可关注微信公众号咨询哦!
“”"
def logout(request):
“”"
退出登录
:param request:
:return:
“”"
pass
(2)登录注册登出路径配置:
(mucis/urls.py文件~)
from django.urls import path
from mucis import views
urlpatterns = [
path(‘login/’, views.LoginResponse.as_view(), name=“login”), # 登录
path(‘register/’, views.RegisterResponse.as_view(), name=“register”), # 注册
path(‘logout/’, views.logout, name=“logout”), # 退出
]
(2)登录注册登出前端模板框架编写:
(templates/mucis/login.html文件~)
{% csrf_token %}
登录
用户名:
密码:
登录
(templates/mucis/register.html文件~)
需要注意的是:别看我这注册和登录的页面一模一样,你就以为这俩直接共用一个模板就行了!真正使用的时候注册需要的信息是比登录要多,所以这俩不可能使用同一个模板。本处为了方便讲解,所以只建了个含有用户名和密码的模型。所以会造成注册和登录可以用同一个模板的假象!
不信你看我在下面注册模板中又随便加了个输入框,但是其实它没用,我只是为了强调这个问题!
{% csrf_token %}
注册
用户名:
密码:
手机号:
注册
简单分析登录注册逻辑实现,以登录逻辑实现为例讲个问题:
问题引入——当编写登录逻辑的时候,需要对form表单中用户提交过来的数据进行简单的校验。之前我对其进行校验都是直接在视图函数中使用if进行,确实可以,但是有B格吗?没有,所以咱不那样干了这次!
其实,不那样用的最主要的原因是:django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码!!!
(1)纯理论来讲讲form表单:
①form表单的引入:
-
登录页面和注册页面都会用到form表单来提交数据
-
当数据提交到后台后,需要在视图函数中去验证数据的合法性.
-
django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码
-
所以这个登录注册案例我们就来使用这个django自带的form来生成前端页面以及验证数据.
②关于django form表单的使用:
-
创建一个forms.py的文件,放在指定的app当中,然后在里面写表单.
-
表单是通过类实现的,继承自forms.Form,然后在里面定义要验证的字段.
-
在表单中,创建字段跟模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False.
-
使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到.(比如此例中request.POST获取的HTML表单元素的name属性值与form表单中的name是一样的:username,password)
-
is_bound属性:用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False.
-
cleaned_data:这个是在is_valid()返回True的时候,保存用户提交上来的数据.
③form表单中的一些参数说明:
-
max_length 最大长度
-
min_length 最小长度
-
widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据
-
attrs 包含渲染后的Widget 将要设置的HTML 属性
-
error_messages 报错信息
注:虽然form可以生成前端页面,但这个功能实际用的少,主要是是用form表单的验证功能!
(2)在本案例中实战使用这个form表单:
在此名为mucis的app下创建forms.py的文件,编写表单校验(用户登录和注册的数据校验):
from django import forms
from django.core.validators import RegexValidator #导入校验器,供下面验证电话号码用
#校验登录
class LoginForm(forms.Form):
#长度校验/非空提醒
username = forms.CharField(max_length=16,min_length=6,error_messages=
{“max_length”:“长度不能超过16位”,
“min_length”:“长度不能小于6位”,
“required”:“用户名不能为空”
})
password = forms.CharField(max_length=16,min_length=6,error_messages=
{“max_length”:“长度不能超过16位”,
“min_length”:“长度不能小于6位”,
“required”: “密码不能为空”
})
“”“”
解释如下注释的原因:
下面这个函数clean()是用于进行数据验证的,本来我想也写在此form表单校验里,但是后面在视图函数里写业务逻辑时发现,
如果验证成功,用户需要登录->这就意味着需要设置session,而session是通过request对象来设置,在视图函数里直接有,可以直接使用;
而如果在此form表单校验里写的话还需要导入,是不是多此一举了,所以此处注释,本逻辑在视图函数里完成!
“”"
def clean(self): # 前端表单用户输入的数据经过上面过滤后再结合后台数据库所有数据进行分析
# 校验数据库中是否有该用户
# 1.拿取用户名和密码
username = self.cleaned_data.get(“username”)
password = self.cleaned_data.get(“password”)
# 2.进行判断
user = User.objects.filter(username=username, password=password)
return user if user else None
#校验注册
class RegisterFrom(forms.Form):
长度校验/非空提醒
username = forms.CharField(max_length=16, min_length=6, error_messages=
{“max_length”: “长度不能超过16位”,
“min_length”: “长度不能小于6位”,
“required”: “用户名不能为空”
})
password = forms.CharField(max_length=16, min_length=6, error_messages=
{“max_length”: “长度不能超过16位”,
“min_length”: “长度不能小于6位”,
“required”: “密码不能为空”
})
phone = forms.CharField(max_length=11, min_length=1, validators=[RegexValidator(r"^1[3-9][0-9]{9}$",“手机号格式有误!”)],error_messages=
{“max_length”: “手机号只能为11位”,
“min_length”: “手机号只能为11位”,
“required”: “手机号不能为空”
})
(3)视图函数业务逻辑完善:
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.urls import reverse
from django.views import View #使用类视图,要导入!
from .models import User
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!