zoukankan      html  css  js  c++  java
  • Django之视图

    Django视图

    Django的视图是指项目的视图函数或视图类,当浏览器发送请求时,视图函数或类会给与响应,响应的网页可以是HTML文件,可以是字符串信息,也可以是重定向等。视图函数和视图类的代码一般放置于项目或APP的views.py文件中。

    每个视图函数或视图类都负责给对应的URL返回一个网页。

    CBV和FBV

    CBV是指基于类的视图,FBV是指基于函数的视图

    FBV示例

    from django.http import HttpResponse
    
    def add_grader(request):
        if request.method == 'POST':
            new_gradername=request.POST.get('gradername')
            models.Grader.objects.create(gradername=new_gradername)
            return redirect('/grader_list/')
        return render(request,'add_grader.html',)
    # home是一个视图函数,每个视图函数默认使用HttpRequest对象作为第一个参数,并且通常称之为request,该参数中包含了请求的信息。
    # 视图会返回一个HttpResponse对象,其中包含响应的内容。

    CBV示例

    from django import views
    
    class AddGrader(views.View):
        
        def get(self,request):  # 请求方式为GET时执行
            return render(request, 'add_grader.html', )
        
        def post(self,request):  # 请求方式为POST时执行
            new_gradername = request.POST.get('gradername')
            models.Grader.objects.create(gradername=new_gradername)
            return redirect('/grader_list/')
    
    # 定义的视图类需要继承views.View
    # urls.py中的对应关系如下
     url(r'^add_grader/$', views.AddGrader.as_view())

     Request对象

    浏览器发送请求,Django会将请求信息包装到请求对象中,响应视图函数通过request参数得到请求对象。

    请求相关的常用值

    请求常用值 说明
    request.path_info 只返回用户访问的URL,不包括域名
    request.method 获取请求使用的方法
    request.GET 返回GET请求的所有参数,类似字典的k:v形式
    request.POST 返回POST请求的所有参数,类似字典的k:v形式
    request.body 返回请求体,byte类型

    上传文件示例

    def upload_file(request):
        if request.method=='POST':
            # print(request.POST)
            # <QueryDict: {'username': ['chris'], '提交': ['提交']}>
            # post提交的文件需要在request.FILES中获取
            # print(request.FILES)
            # <MultiValueDict: {'photo1': [<InMemoryUploadedFile: a.jpg (image/jpeg)>], 'photo2': [<InMemoryUploadedFile: b.gif (image/gif)>]}>
            # 得到文件对象字典,文件名对应文件对象,可根据文件名拿到文件对象
            file_obj1 = request.FILES.get('photo1')
            file_obj2 = request.FILES.get('photo2')
            # print(file_obj1,type(file_obj1))
            # a.jpg <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
            file_name=file_obj1.name
            # print(file_name)  # a.jpg
            with open(file_name, 'wb')as f:
                for line in file_obj1:
                    f.write(line)
            return HttpResponse('成功')
        return render(request,'upload_file.html')
    视图函数
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
    
    </head>
    <body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="text" name="username">
        <input type="file" name="photo1">
        <input type="file" name="photo2">
        <input type="submit" name="提交">
    </form>
    
    <script src="/static/jquery-3.3.1.min.js"></script>
    <script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
    </body>
    </html>
    upload_file.html

     Respanse对象

    相关操作

    # 响应字符串
    from Django.http import HttpResponse
    response=HttpResponse('text page')
    
    
    # 设置响应头信息
    response = HttpResponse()
    response['Content-Type'] = 'text/html; charset=UTF-8'
    # 删除响应头信息
    del response['Content-Type']
    
    
    # 示例
    def home(request):
        response = HttpResponse
        print(response)
        # <class 'django.http.response.HttpResponse'>
        response = HttpResponse("Text only, please.", content_type="text/plain")
        print(response)  # <HttpResponse status_code=200, "text/plain">
        response['Content-Type'] = 'text/html; charset=UTF-8'
        print(response)
        # <HttpResponse status_code=200, "text/html; charset=UTF-8">
        del response['Content-Type']
        print(response)
        # <HttpResponse status_code=200>
        return HttpResponse('hello')
  • 相关阅读:
    contentprovider的学习实例总结
    Android模拟器avd的创建、使用和调试相关命令
    android中的界面编程
    android的项目文件介绍
    下学期课程安排
    tcexa
    JavaScript,Java,php的区分大小写问题
    Spark RDD-行动算子
    Spark RDD-转化算子
    SparkCore RDD概述
  • 原文地址:https://www.cnblogs.com/mingkong-z/p/9188030.html
Copyright © 2011-2022 走看看