百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Python Django Web 框架编程 - 创建应用及视图

wptr33 2024-11-26 09:30 29 浏览

现在开发环境中的 mysite 项目已经配置好了,可以开始开发实际的应用了。

在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮助生成应用的基础目录结构,这样就能专心写代码,而不是创建目录结构了。

创建投票应用

项目和应用的区别

应用(App)是一个专门做某件事的网络应用程序,例如博客系统,或者公共记录的数据库,或者小型的投票程序等。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。

创建应用 App

一个项目包含多个应用app。一个app 通常就是一个相对独立的模块 ,实现相对独立的功能。

在 VSCode 中,点击 Toggle Panel,显示出 Terminal Panel,在Terminal Panel中点击一下,然后按 Ctrl + C,切换回项目目录,然后输入下面的命令:

python manage.py startapp polls    # polls 就是应用名字

执行完之后,就创建了 polls 应用,会发现多了一个 polls 文件夹,这里保持的就是应用 App 的代码。同时也多了一个文件 db.sqlite3,这是 Django 默认自带的数据库,可以直接使用。当然也可以配置其他数据库,例如 mysql 数据库。

polls 应用下各文件说明如下图:

注册应用

在项目设置文件 settings.py 中的 INSTALLED_APPS 添加应用 polls,完成注册过程。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',    #注册应用 polls
]

编写视图

打开 polls/views.py,把下面这些 Python 代码输入进去:

from django.http import HttpResponse

#定义视图函数
def index(request):
    return HttpResponse("你好,这里是第一个 Django 页面!")

这是 Django 中最简单的视图。当然现在还看不到效果,如果想看见效果,需要将一个 URL 映射到它。

URL 配置

在 VSCode在,在 polls 目录点击右键,选择“New File”,然后输入文件名urls.py,就新建一个 urls.py 文件,该文件实现了绑定 URL 到 views.py 的视图函数。

在 polls/urls.py 中,输入如下代码:

from django.urls import path

from . import views

urlpatterns = [
    path('index', views.index, name='index'),     #表示将 polls 应用的默认页绑定到了 index 视图函数
]

然后需要在主路由 urls.py 文件中指定新创建的 polls.urls 模块。在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

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

urlpatterns = [
    path('polls/', include('polls.urls')),    #将polls.urls 模块包含进来
    path('admin/', admin.site.urls),
]

函数 include() 允许引用其它 URL。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URL 以供进一步处理。

设计 include() 的理念是使其可以即插即用。因为 polls 应用有它自己的 URL( polls/urls.py ),他们能够被放在 "/polls/" , "/fun_polls/" ,"/content/polls/",或者其他任何路径下,这个应用都能够正常工作。

重新启动服务器,在 VDCode 的 Terminal panel 中运行 runserver:

python manage.py runserver   

浏览器访问 http://localhost:8000/polls/index,你应该能够看见 "你好,这里是第一个 Django 页面!" ,这是在 index 视图函数中定义的返回内容。

path() 函数

函数 path() 具有四个参数,两个必须参数:routeview,两个可选参数:kwargsname

  • route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。这些准则不会匹配 GET 和 POST 参数或域名。
  • view 当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。
  • kwargs 任意个关键字参数可以作为一个字典传递给目标视图函数。
  • name 为 URL 取个名字,能够在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许在只改一个文件就能全局地修改某个 URL 模式。

url路由

在创建项目目录的时候,在项目的设置目录下,有如下的一个 urls.py 文件,这个是主路由文件。这个文件是 url路由设置的入口文件。文件中 urlpatterns 列表就是 Django 的 url 路由的入口。里面是一条条的路由记录,例如添加的:path('polls/', include('polls.urls')),

就是告诉当前端过来的请求 url地址 是 /polls/ (注意:最后的一个斜杠不能省略) ,函数 include() 允许引用子路由文件,例如应用 polls 的 urls.py。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到子路由文件以供进一步处理。

在应用 polls 中,urls.py 文件是子 url 路由设置的入口文件。文件中 urlpatterns 列表就是 Django 的 url 路由的入口。里面是一条条的路由记录,例如:path('index/', views.index, name='index')

就是告诉当前端过来的请求 url地址 是 /polls/index/ (注意:最后的一个斜杠不能省略) , 就由 views.py 里面的函数 index 来处理。

所以,所谓路由就是指 : 根据 HTTP请求的url路径, 设置 由哪个 view 函数来处理这个请求。

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...