首页 > 其他分享 >05. 视图函数

05. 视图函数

时间:2023-09-27 19:22:04浏览次数:28  
标签:index 函数 views app 05 request 视图 import

一、什么是视图函数

  视图函数,简称视图,是一个 Python 函数,它接收 Web 请求并返回 Web 响应。响应可以是一个 HTML 文件、一个重定向、一个 404 错误、一个 XML 文档、或者一张图片等等,它可以是任何东西。无论视图本身包含什么逻辑,都要返回响应。逻辑处理代码写在哪里都可以,只要它在 Django 项目的文件夹下就可以。一般,我们都将视图函数放在项目或者应用程序目录中的名为 views.py 文件中。

二、创建简易Django项目

  用户通过在浏览器中输入 URL 和单击链接来请求网页,因此需要确定项目需要哪些 URL。我们新建一个 Django 项目,并在项目的主文件夹 Django 中的文件 urls.py 中添加要请求的路径:

from django.contrib import admin
from django.urls import path, re_path, include

urlpatterns = [
    # 路由配置:路径 ---> 视图函数
    path('admin/', admin.site.urls),

    # 路由分发
    re_path(r"^app/", include("app.urls"))
]

  在 app 应用中新建一个 urls.py 文件:

from django.urls import re_path

from app import views

urlpatterns = [
    # 路由配置:路径 ---> 视图函数
    # 这里URL使用正则表达式,^表示开头匹配,$表示结尾匹配
    re_path(r'^index/$', views.index),
]

  视图函数接受请求的信息,准备好生成网页所需要的数据,再将这些数据发给浏览器。我们再新建一个应用程序,并在 app 文件夹中的文件 views.py 中添加视图函数:

from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request, "app/index.html")

  模板定义网页的外观。每当网页被请求时,Django 都将填入相关的数据。模板让你能够访问视图提供的任何数据。我们在 templates 文件夹中 app 文件夹,专门用于存放 app 应用的模板。然后,我们在 app 文件夹下新建一个 index.html 文件,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--
        method="get" 发送get请求
        method="post" 发送post请求
        如果action什么都不写,会把form表单所在的URL作为路径访问
        如果不加IP和端口,会用form表单所在的URL的IP和端口
    -->
    <form method="post" action="/app/index/">
        姓名: <input type="text" name="name"><br>
        年龄: <input type="text" name="age"><br>
        <input type="submit">
    </form>
</body>
</html>

  我们还要把 Django 项目下的 settings.py 文件下的 MIDDLEWARE 列表下的 'django.middleware.csrf.CsrfViewMiddleware' 注释掉,否则点击表单提交的时候,浏览器会返回 Forbidden (403) 页面。

csrf

Forbidden

简易的Django项目

三、请求对象

  修改 app 应用中 views.py 文件:

from django.shortcuts import render

# Create your views here.
def index(request):

    print("method: ", request.method)               # 请求方式

    if request.method == "GET":
        print("GET: ", request.GET)                 # 存储所有GET请求信息
        name = request.GET.get("name")              # 获取GET请求中的信息
        age = request.GET.get("age")
        print("name: ", name)
        print("age: ", age)
    else:
        print(request.POST)                         # 存储所有POST请求信息
        name = request.POST.get("name")             # 获取POST请求中的信息
        age = request.POST.get("age")
        print("name: ", name)
        print("age: ", age)

    """
        get请求的url:rl: 协议://IP:port/路径?参数名=参数值&参数名=参数值
        post请求的url: 协议://IP:port/路径
    """
    print("path: ", request.path)
    print("full path:", request.get_full_path())    # 将路径和GET请求的参数都打印出来

    return render(request, "app/index.html")

四、响应对象

【1】、HttpResponse 对象

  修改 app 应用中 views.py 文件:

from django.shortcuts import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("<h1>OK</h1>")

【2】、render() 方法

  修改 app 应用中 views.py 文件:

from django.shortcuts import render

# Create your views here.
def index(request):
    import time

    ctime = time.time()

    return render(request, "app/index.html", {"ctime": ctime})

  在创建使用数据的网页时,调用了 render() 函数,,并向它传递 请求对象、要使用的 模板字典上下文

  修改 templates 文件夹下的 app 文件夹中 index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--
        method="get" 发送get请求
        method="post" 发送post请求
        如果action什么都不写,会把form表单所在的URL作为路径访问
        如果不加IP和端口,会用form表单所在的URL的IP和端口
    -->
    <form method="post" action="/app/index/">
        姓名: <input type="text" name="name"><br>
        年龄: <input type="text" name="age"><br>
        <input type="submit">
    </form>

    <p>{{ ctime }}</p>
</body>
</html>

  模板接受视图函数发过来的字典上下文对象,以便能够使用视图函数提供的数据。要在模板中打印数据,需要将变量名用双花括号括起来。这些花括号不会出现在网页中,只是告诉 Django,我们使用了一个模板变量。

【3】、redirect() 方法

from django.shortcuts import redirect

# Create your views here.
def index(request):
    import time

    ctime = time.time()

    return redirect("https://www.baidu.com", {"ctime": ctime})

  redirect() 函数要求提供两个参数:要重定向到的视图,以及 要给视图函数提供的参数

标签:index,函数,views,app,05,request,视图,import
From: https://www.cnblogs.com/kurome/p/17734119.html

相关文章

  • 无涯教程-JavaScript - TREND函数
    描述TREND函数沿线性趋势返回值。(使用最小二乘法)将一条直线拟合到阵列known_y和known_x。返回指定的new_x数组沿该行的y值。语法TREND(known_y's,[known_x's],[new_x's],[const])争论Argument描述Required/OptionalKnown_y's在关系y=mx+b中,您已经知道的y值......
  • 无涯教程-JavaScript - TREND函数
    描述TREND函数沿线性趋势返回值。(使用最小二乘法)将一条直线拟合到阵列known_y和known_x。返回指定的new_x数组沿该行的y值。语法TREND(known_y's,[known_x's],[new_x's],[const])争论Argument描述Required/OptionalKnown_y's在关系y=mx+b中,您已经知道的y......
  • Threejs -- TweenJS自定义flyTo函数
    TweenJS参考文档笔记末尾附自定义flyTo函数动画库tweenjs简介和引入项目TweenJS是一个有javascript语言编写的补间动画库,如果需要tweenjs辅助你生成动画,对于任何前端web项目,你都可以选择tweenjs库。如果你是用three.js开发web3d项目,使用tween.js辅助three.js生成动画效果......
  • 分析函数(窗口函数)
    一、什么是分析函数:分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。   基本语法:<窗口函数>over(partitionby<用于分组的列名>                       ......
  • Hive函数高阶——explode函数、UDAF聚合函数
    1、explode函数(输入一行,输出多行)引入lateralview侧视图的概念解决上面问题的限制:2、UDAF聚合函数增强聚合——groupingsets(相当于unionall)增强聚合——cube增强聚合——rollup(是cube的子集,以左侧维度为主)......
  • Java函数AI生成器:秒级体验,高质量生成
    职业使然,之前我自己试用并给小伙伴们推荐过不少大模型相关的产品,这些产品看起来牛逼plus,但是它们要么对国内有限制,要么是申请制/邀请制,自己没个资想搞个账号去体验一下都难如登天,忍不住吐槽某大厂虽然早早的对外宣布面向全民开发,但实际上提交了手机号码还在等待排队上车,掐指一算,有......
  • realloc函数应用&IO泄露体验
    本题主要介绍realloc函数,平时我们使用realloc最多便是在打malloc_hook-->onegadget的时候,使用realloc_hook调整onegadget的栈帧,从而getshell。在realloc函数中,也能像malloc一样创建堆,并且比malloc麻烦一些,但是倒是挺有趣的。reallocrealloc(realloc_ptr,size)有两个参数,并且在......
  • Hive函数入门——内置函数+用户定义函数
    1、内置函数1、字符串、时间类型函数之前也是在c语言里面学过,包括concat、split等;时间类型函数:前不久用到的函数:date_add--->当前日期的后的第几天的日期;date_sub--->当前日期的前的第几天的日期;2、数学函数、集合函数round--取整数值(还能指定保留的精度)floor--向下取整......
  • 数据库 - MySQL转换SQL Server时,替换 FIND_IN_SET 函数引发的问题
    MySQL转换SQLServer时,替换FIND_IN_SET函数引发的问题 在之前的文章中,我列举出了一个当MySQL转换SQLServer时,FIND_IN_SET函数在SQLServer中的解决方案:链接 就是使用charindex(cast(匹配列asvarchar(50)),被匹配列(多个用,分开的值))<![CDATA[>]]>0替换MyS......
  • MySQL IFNULL函数
    MySQLIFNULL函数简介MySQLIFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。否则,IFNULL函数返回第二个参数。两个参数可以是文字值或表达式。以下说明了IFNULL函数的语法: 1IFNULL(expression_1,expression_2); 如果expression_1不为NULL,则......