栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django View相关操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django View相关操作

文章目录
  • 配置路由的两种方式
    • 创建视图函数的方式:
    • 继承类的方式:
    • 如何不需要任何处理视图的方法就能返回页面
  • 自动校验用户是否存在
  • 使用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"))
校验后,数据不符合要求如何处理?

从上面的代码看出已经将错返回到前端了,只需要在前端展示出来

跳转页面(HttpResponseRedirect)
from django.http import HttpResponseRedirect

return HttpResponseRedirect(reverse("index"))

reverse(“路由名”),在urls的name的名字

返回参数到前端
return render(request,"html/login.html",{"msg":"用户名或密码错误"})
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/957897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号