- 配置路由的两种方式
- 创建视图函数的方式:
- 继承类的方式:
- 如何不需要任何处理视图的方法就能返回页面
- 自动校验用户是否存在
- 使用forms校验form表单提交的数据
- 校验后,数据不符合要求如何处理?
- 跳转页面(HttpResponseRedirect)
- 返回参数到前端
在相关的app下的view文件创建相关的视图函数,然后在urls中配置
创建视图函数:
def message_form(request):
return render(request,"mesage_form.html")
继承类的方式:
在相关的app下的view文件下创建类需要继承View类,然后在配置urls
创建视图类:
类需要继承 from django.views.generic.base import View
然后定义两个方法一个处理get请求一个处理post请求
from django.shortcuts import render
from django.views.generic.base import View
from django.contrib.auth import authenticate,login
from django.http import HttpResponseRedirect
from django.urls import reverse
# Create your views here.
class LoginView(View):
def get(self,request,*args,**kwargs):
return render(request,"html/login.html")
def post(self,request,*args,**kwargs):
user_name=request.POST.get("username","")
password=request.POST.get("password","")
# authenticate自动检测是否有该用户
user=authenticate(username=user_name,password=password)
if user is None:
return render(request,"html/login.html",{"msg":"用户名或密码错误"})
login(request,user)
# 跳转这里的index是在urls配置路由的name
return HttpResponseRedirect(reverse("index"))
然后在urls中配置
需要导入刚刚创建的类,还要导入TemplateView,然后配置好访问地址后使用创建好的类名.as_view()
参数name是这个路由的名字,在表单提交数据的action就可以使用{% url ‘login’ %}
from django.views.generic import TemplateView
from django.urls import path
from apps.users.views import LoginView
urlpatterns = [
path('', TemplateView.as_view(template_name="html/index.html"),name='index'),
path('login/', LoginView.as_view(),name='login'),
]
如何不需要任何处理视图的方法就能返回页面
需要在urls配置对应的路由地址和返回的页面就ok了,name是他的路由名方便我们调用
from django.views.generic import TemplateView
urlpatterns = [
path('', TemplateView.as_view(template_name="html/index.html"),name='index'),
]
自动校验用户是否存在
需要导包from django.contrib.auth import authenticate
user=authenticate(username=user_name,password=password)
将相关的参数传去后只需要判断是否为空就完成了校验是否有该用户的复杂操作了
from django.contrib.auth import authenticate
user=authenticate(username=user_name,password=password)
if user is None:
return render(request,"html/login.html",{"msg":"用户名或密码错误"})
使用forms校验form表单提交的数据
使用forms后,在后端取其值:
user_name=login_form.cleaned_data["username"]
使用了forms后,在前端取其值:
{{ login_form.username.value }}
使用了forms后,值不符合要求如何在前端中展示出来
{% for key,error in login_form.errors.items %}
{{ error }}
{% endfor %}
django可以使用forms来帮助我们校验form传过来的参数
需要在app下创建一个forms文件:
from django import forms
class LoginForm(forms.Form):
username=forms.CharField(required=True,min_length=2)
password=forms.CharField(required=True,min_length=3)
里面的字段需要和form表单中的name要一样,然后在相应的view文件写入:
#导入刚刚创建的类
from apps.users.forms import LoginForm
#使用Form校验
login_form=LoginForm(request.POST)
#判断值是否符合要求,并报的错一并返回
if not login_form.is_valid():
return render(request, "html/login.html", {"login_form": login_form})
#取出user_name和password的值
user_name=login_form.cleaned_data["username"]
password=login_form.cleaned_data["password"]
# authenticate自动检测是否有该用户
user=authenticate(username=user_name,password=password)
if user is None:
return render(request,"html/login.html",{"msg":"用户名或密码错误","login_form": login_form})
login(request,user)
# 页面跳转
return HttpResponseRedirect(reverse("index"))
校验后,数据不符合要求如何处理?
从上面的代码看出已经将错返回到前端了,只需要在前端展示出来
from django.http import HttpResponseRedirect
return HttpResponseRedirect(reverse("index"))
reverse(“路由名”),在urls的name的名字
return render(request,"html/login.html",{"msg":"用户名或密码错误"})



