美文网首页
7.django内urls以及views的编写

7.django内urls以及views的编写

作者: 何阿驼 | 来源:发表于2018-07-12 15:41 被阅读0次

    流程为:

    urls.py----->app/urls.py------>app/views.py------->template/index.html

    1530990126180.png 1530990074429.png 1530990084653.png

    基于类的view视图

    一开始django只有基于函数的视图(function-based view),为了解决开发视图中繁琐的重复代码,基于类的view视图出现了

    于是你可以再你的view中去引用view

    1530990480621.png 1530990512860.png

    View自带了很多的方法,其中包括get,post等。

    像之前我们写一个表单请求,代码与下面的类似

    #不基于类
    def login_te(request):
        if request.method =="POST":
            user_name = request.POST.get("username","")
            pass_word = request.POST.get("password","")
            user = authenticate(username=user_name,password=pass_word)
            if user is not None:
                login(request,user)
                return render(request,'index.html')
            else:
                return render(request,'login.html',{'message':"账号密码错误"})
        elif request.method=="GET":
            return  render(request,'login.html',{})
    

    我们需要去调用request.method 并检查他是post请求还是get请求,并且分别对他们进行数据的整理以及结果的处理。

    但是如果我们使用了类视图

    这里的get直接可以获取username和password,基于类的话他可以自定定义时post请求还是get请求
    class Login_View(View):
        def post(self,request):
            form = loginForm(request.POST)  #传进来一个字典的参数
            if form.is_valid():    #判断是否符合form表单要求
                username = request.POST['username']
                password = request.POST['password']
                user = authenticate(username=username, password=password)
                if user is not None:
                    if user.is_active:
                        login(request, user)
                        return render(request, 'index.html')
                    else:
                        return render(request,'login.html',{'message':'账号未激活'})
                else:
                    return render(request,'login.html',{'message':'账号密码错误'})
            else:
                return render(request, 'login.html', {'form_message':form})
        def get(self,request):
            return  render(request,'login.html')
    

    直接使用 post和get方法就可以

    不同的View

    在django.views.generic中我们可以看见有很多的类

    1530990789428.png

    但是他们都继承至view这个父类。同时还继承了一些mixin功能类。

    如TemplateView继承了TemplateResponseMixin,ContextMixin,View

    1530990934498.png 1530991032042.png

    这里可以写入template_name的名字。

    经过一系列的转换最终会跳转至template_name所指向的html页面

    1530991245385.png

    所以之前的跳转,我们可以写成这样。

    相关文章

      网友评论

          本文标题:7.django内urls以及views的编写

          本文链接:https://www.haomeiwen.com/subject/aulrpftx.html