[Python]Django 视图(View)和URL 与 模板(Template)

简介: [Python]Django 视图(View)和URL 与 模板(Template)

a191ef3f5ac24948924c866bba623478.jpg

前言

系列文章目录

[Python]目录

视频及资料和课件

链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234

提取码:1234

1. 视图(View)

视图就是一个Python函数,被定义在子应用的views.py中。

视图函数的第一个参数就是客户端发送过来的请求,即HttpRequest类型的对象reqeust,包含了所有请求信息。

导入HttpRequest:

from django.http import HttpReques

视图必须返回一个响应,响应是HttpResponse的实例对象或者HttpResponse子类的实例对象,包含返回给请求者的响应信息。

导入HttpResponse:

from django.http import HttpResponse

视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者,响应内容可以是HTML内容,404错误,重定向,json数据…

1.1 定义视图

login/views.py

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
# Create your views here.
def index(request):
    return HttpResponse('index')

2. URL 定义路由

2.1 查找视图的过程

1.请求者在浏览器地址栏中输入URL, 请求到服务器.

2.服务器获取URL信息.

3.然后与编写好的路由规则逐条匹配.

4.如果匹配成功则进入相应的模块进行处理.

5.如果所有的路由规则都没有匹配成功,则返回404错误。

寻找路径会默认进入项目文件项目相关配置文件夹内的urls.py文件中进行查找。

此项配置可以进行修改,但是一般不进行修改。

2.2 定义路由

项目名/urls.py

# 1. urlpatterns 是固定写法,urlpatterns的值为列表
# 2. 在浏览器中输入的路径会和urlpatterns中的每一项顺序进行匹配
#     如果匹配成功,会进入对应的模块,进行后序的处理
#     如果所有都匹配不成功直接返回404
# 3. 请求路径:http://ip:port/path?key=value中http://ip:port/和get、post参数不参与匹配
# 即 path 参与路由匹配
urlpatterns = [
    path('admin/', admin.site.urls),
]

添加自己的路由:

from django.contrib import admin
from django.urls import path
from django.urls import include
# 1. urlpatterns 是固定写法,urlpatterns的值为列表
# 2. 在浏览器中输入的路径会和urlpatterns中的每一项顺序进行匹配
#   如果匹配成功,会进入对应的模块,进行后序的处理
#   如果匹配不成功直接返回404
urlpatterns = [
    path('admin/', admin.site.urls),
    # 与‘admin/’匹配失败的向下继续匹配
    # 添加自己的路由的写法:
    # Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
    # 与'index/'匹配,引导到login.urls中
    path('index/', include('login.urls'))
]

login/urls.py:

from django.urls import path
from login.views import index
urlpatterns = [
    # 在 项目名.urls中与index/匹配成功进入该模块继续进行匹配
    # 匹配成功进入login.views 中的 index 函数进去请求的处理与响应
    path('index/', index)
]

index/index/参与匹配,第一个index/与项目名.urls中的index/进行匹配,匹配成功,进入login.urls,第二个index/参与匹配,匹配成功进入login.views 中的 index 函数

2.3 路由匹配流程图

2.4 在项目的urls.py进行处理函数的匹配

在项目的urls.py进行匹配,不引导到子应用中继续进行路由的匹配。

Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
from django.contrib import admin
from django.urls import path
from django.urls import include
from login.views import index
# 1. urlpatterns 是固定写法,urlpatterns的值为列表
# 2. 在浏览器中输入的路径会和urlpatterns中的每一项顺序进行匹配
#   如果匹配成功,会进入对应的模块,进行后序的处理
#   如果匹配不成功直接返回404
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('index/', include('login.urls'))
    # 直接在项目的urls中进行匹配,不引导到子应用中
    path('index/index/', index)
]

引导到子应用中继续匹配,该种写法可以对请求进行分类处理,如有关登录的请求到登录的子应用中进行处理。

2.5 为路由命名

为路由命名,可以用于反解析,通过路由的名字获取对应的路由,避免因为路由的修改,导致其他用到该路由的地方也要进行相应的修改。

book/urls.py:

from django.urls import path
from book.views import index
urlpatterns = [
    path('index/', index, name='index')
]

2.6 reverse反解析

# 使用路由进行页面的跳转
# 登陆成功之后跳转回首页
# return redirect('/index')
# 注册成功之后跳转回首页
# return redirect('/index')

如果路由进行了修改,则多处用到该路由的地方也要进行修改。

使用reverse反解析路由,需要先进行导入:

from django.urls import reverse
from django.urls import reverse
# 动态获取路由名对应的路由
path = reverse('index')
# 使用动态获取的路由进行页面的跳转
# 登陆成功之后跳转回首页
# return redirect(path)
# 注册成功之后跳转回首页
# return redirect(path)

使用该方法,即使路由进行了修改,使用到该路由的地方也不用进行修改。

2.7 路由命名空间

在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间。

命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。

项目/urls.py:

子应用的命名空间习惯使用子应用名进行命名。

注意:定义了命名空间,include第一个参数数据类型必须设置为元组类型,且元组需要包含两个元素,第一个元素为’子应用名.urls’,第二个元素为’子应用名’,include第二个参数为命名空间

urlpatterns = [
    path('admin/', admin.site.urls),
    # path('index/', include('login.urls'))
    # 注意:定义了命名空间,include第一个参数数据类型必须设置为元组类型,
    # 且元组需要包含两个元素,第一个元素为'子应用名.urls',第二个元素为'子应用名'
    # include第二个参数为命名空间
    path('book/', include(('book.urls', 'book'), namespace='book'))
]

命名空间表示,凡是book.urls中定义的路由,均属于namespace指明的book名下

指定了命名空间后,通过reverse动态获取路由需要使用命名空间:路由名

path = reverse('book:index')

3. 模板(Template)

模板即网页的页面。

3.1 模板使用步骤

  1. 创建模板
  2. 设置模板查找路径
  3. 模板接收视图传入的数据
  4. 模板发送给客户端

3.2 创建模板

单独创建一个文件夹,用于存放网页页面的文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    <!-- 模板语言 -->
    <h1>你好,{{name}}</h1>
</body>
</html>

3.3 设置模板查找路径

'DIRS': [ os.path.join(BASE_DIR, 'template') ],
• 1

3.4 模板接收视图传入的数据 & 模板发送给客户端

模板发送给客户端,使用render()函数

# render() 有三个参数
  # request  template_name  context=None
  # request:当前的请求
  # template_name:模板文件
  # context:要向模板文件中传递的数据,传递的参数类型为字典
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
# Create your views here.
def index(request):
    # return HttpResponse('index')
    # render() 有三个参数
    # request  template_name  context=None
    # request:当前的请求
    # template_name:模板文件
    # context:要向模板文件中传递的数据,传递的参数类型为字典
    # context中的key会与模板文件中需要填充数据的位置进行匹配
    context = {
        'name': 'ZS'
    }
    return render(request, 'index.html', context)

流程图:

4. 案例

经过[Python]Django模型(Model)中的操作,目前模型BookInfo中已经有两个对象数据。

实现:使用模型从数据库中查询数据,并获取页面模板,将查询出来的数据添加到页面模板中,并将最后的页面返回给客户端。

login/views.py:

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
# 导入模型
from login.models import BookInfo
# Create your views here.
def index(request):
    # 数据库操作语言:
    # select * from BookInfo
    # ORM中查询表中的全部数据使用:
    # 模型(类).objects.all()
    books = BookInfo.objects.all()
    context = {
        'books' : books
    }
    # 获取页面,将数据放入页面,并返回给客户端
    return render(request, 'index.html', context)

后面的文章会进行讲解

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    <ul>
        {# 模板语言:遍历数据 #}
        {% for book in books %}
        {% books view中传递进来的books %}
            <li>{{book.name}}</li>
        {% endfor %}
    </ul>
</body>
</html>


相关文章
|
8月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
376 1
|
10月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
363 6
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
765 45
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
423 2
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
849 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
933 4
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
540 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
597 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
490 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
500 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台

推荐镜像

更多