【Django学习】(三)全局路由配置与匹配规则&创建视图函数

简介: 【Django学习】(三)全局路由配置与匹配规则&创建视图函数

前言:

1、描述两种开发模式的区别:

1.1、前后端分离:

  1. 前端和后端分别由不同的开发人员开发维护;
  2. 前端可以通过调用接口获取后端返回的数据 展示动态的数据;
  3. 出现问题容易区分责任;
  4. 前后端解耦合,可以同时开发,提高开发效率;
  5. 一个后台即可满足网站、app、小程序等多种应用的需要

1.2、前后端不分离:

  1. 前端和后端不分别由相同的开发人员开发维护;
  2. 客户端只需要请求不同的页面,服务器会完成页面上的所有数据逻辑,所以 http 请求次数较少;
  3. 出现问题不容易区分责任;
  4. 每个请求都是一个 HTML,会有大量的冗余数据;
  5. 响应数据是 HTML,只能适应单一客户端,当需要多端支持时如要单独开发

2、Django中前端向后端传参的方式有哪些? 后端如何接收?

前端向后端传参的方式:

前端可以通过不同类型的请求(get\post\put等)向后端传递参数:1、body中form表单;2、body中json数据;3、body中file文件;4、param传参:url后面直接拼接(url?参数1&参数2)

  • 后端如何接收
  • 后端通过前端发起的ajax请求,从数据库读取数据后以json格式的方式返回给前端

先明白一个名词

什么是路由?

url与后端视图的一一映射关系

  • 类似于导航
  • 类似于路由器

主路由在项目同名目录下的urls.py文件中定义,是Django解析路由的入口

一、路由的配置:

全局路由表:

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('projects/',include('projects.urls')),
    path('projects/',index1),
    # path('interface/',include('interfaces.urls'))
]

projects应用中子路由的urls.py

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('index1/',index1),
    re_path('^index2/$',index2)
]

说明:

1.urlpatterns为名称固定的列表

2.列表中一个元素,代表一条路由

3.定义路由

方式一:(使用path函数)

a.调用path函数,第一个参数为url路径字符串(去除http://ip:port/)

b.不能以斜杠开头

c.第二个参数可以为需要调用的视图函数名(不可以加括号)


方式二:(使用re_path)

a.re_path, 第一个参数为url路径字符串(正则表达式,一定要有^和$)

b.第二个参数可以为需要调用的视图函数名(不可以加括号)

还有种引用视图函数的方法是,在子路由文件中直接导入views文件

from django.urls import path, re_path
from projects.views import index1, index2,MyView
#导入views视图文件
from projects import views
urlpatterns = [
    # path('admin/', admin.site.urls),
    path('index1/', index1),
    #第二个参数使用views.视图函数
    path('index1/', views.index1),
    re_path('^index2/$', index2),
]

4.匹配规则

a.列表中的元素,从上到下进行匹配

b.一旦匹配成功,停止匹配,会自动调用path(re_path)函数的第二个参数指定的函数

c.如果匹配不成功,会继续往下匹配

d.如果所有的路由都匹配不上,那么会抛出一个404页面(404异常)

5.子路由

a.可以在子应用中定义子路由urls.py文件

b.path函数第二个参数需要调用include函数

c.include函数的第一个参数为子路由文件的路径字符串,'子应用名.urls'

e.如果能匹配成功,会自动进入到子路由中去匹配

f.如果匹配不成功,那么会继续往下匹配

二、视图

定义:类似于MVC模式中的C控制器,主要用于业务逻辑的处理。

projects应用的views.py

views视图文件里写了我们接口的处理逻辑,并且需要返回的结果;

这里我们定义了3个视图函数,index1/index2是对index视图函数的改写

from django.shortcuts import render
import requests
from django.http import HttpResponse, JsonResponse
from rest_framework.response import Response
# Create your views here.
def index(request):
    return HttpResponse('哈喽大佬,我是HttpResponse')
#根据不同请求类型,返回不同的json数据
def index1(request):
    if request.method.upper() == 'GET':
        return JsonResponse("哈哈哈哈,我是get请求数据!!!",safe=False)
    elif request.method.upper() == 'POST':
        return JsonResponse("嘿嘿嘿,我是post请求返回数据",safe=False)
    else:
        return JsonResponse("我是其他请求返回数据",safe=False)
def index2(request):
    if request.method.upper() == 'GET':
        return JsonResponse("哈哈哈哈,我是index2的get请求数据!!!",safe=False)
    elif request.method.upper() == 'POST':
        return JsonResponse("嘿嘿嘿,我是index2的post请求返回数据",safe=False)
    else:
        return JsonResponse("我是index2的其他请求返回数据",safe=False)
  • index视图函数:
  • 视图函数的第一个参数是HttpRequest对象或者子类对象
  • WSGIRequest是HttpRequest子类
  • 一定要返回一个HttpResponse对象或者子类对象

当使用postman工具请求对应的路由地址时,返回了对应视图函数的json格式结果数据 :

http://127.0.0.1:8000/projects/index1/

当我们请求另一个路由时:http://127.0.0.1:8000/projects/index2/ ,返回了对应视图函数的返回值

相关文章
|
4月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
140 1
|
3月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
140 1
|
11月前
|
Python
Django 框架的路由系统
Django 框架的路由系统
280 63
|
12月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
696 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
12月前
|
SQL Java 数据库
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
107 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
|
12月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
389 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
296 0
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
4月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
118 1