Django文档简化版——Django快速入门——创建一个基本的投票应用程序
Django快速入门——创建一个基本的投票应用程序
- 准备工作
- 1、创建虚拟环境
- 2、安装django
- 1、请求和响应
- (1)创建项目
- (2)用于开发的简易服务器
- (3)创建投票应用
- (4)编写第一个视图
- 1、编写视图函数
- 2、url映射
- URLconf文件中指定创建的polls.urls模块
- 3、运行服务器
- 函数path()
- 2、模型和管理站点
- (1)数据库配置
- (2)创建模型
- (3)激活模型
- 总结步骤
- (4)初试API
- (5)介绍Django管理页面
- 创建一个管理员账号
- (6)启动开发服务器
- (7)进入管理站点页面
- (8)向管理页面加入投票应用
- (9)体验便捷的管理功能
准备工作
1、创建虚拟环境
开始之前,最好创建一个虚拟环境来管理包。python自带的“venv”工具就够用了(轻量级且快速)

2、安装django

检查版本信息

1、请求和响应
(1)创建项目
自动生成的代码配置一个django 项目(项目实例需要的设置项集合)
包含
- 数据库配置
- Django配置
- 应用程序配置
cd到放置代码的目录,创建项目
django-admin startproject vote(可自定义名称)
创建的目录结构如下

- 最外层的 vote/根目录只是你项目的容器,根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。
- manage.py:一个让你用各种方式管理 Django 项目的命令行工具。
- 里面一层的 vote/目录包含你的项目,它是一个纯 Pyhon包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。(比如vote.urls)
- vote/_init-.py:一个空文件,告诉 Python 这个目录应该被认为是一个Python 包
- settings.py:Django 项目的配置文件
- asgi.py:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口
- wsgi.py:作为你的项目的运行在 WSGI兼容的Web服务器上的入口
(2)用于开发的简易服务器
确保项目真实创建
py manage.py runserver

访问http://127.0.0.1:8000/:

你已经启动了 Django 开发服务器,这是一个用纯 Python 编写的轻量级网络服务器。我们在 Django 中包含了这个服务器,所以你可以快速开发,而不需要处理配置生产服务器的问题
(3)创建投票应用
项目vs应用
项目可以包含多个应用,应用可以被多个项目使用
在manage.py同级目录下创建投票应用。(作为顶级模块导入:在 Django 中,顶级模块导入意味着你可以直接在项目的任何地方导入这个应用,而不需要使用相对导入)

(4)编写第一个视图
1、编写视图函数
polls\views.py编写
from django.http import HttpResponse
def index(request):return HttpResponse("hello world.")
- 这是一个名为 index 的视图函数,它接受一个 request 参数(即 HTTP 请求对象),并返回一个包含 “hello world.” 字符串的 HttpResponse 对象。这个视图函数简单地返回一个 HTTP 响应,显示 “hello world.”。
要看到效果,需要将一个URL映射到它
2、url映射
新建文件 polls\url.py

在它里面编写
from django.urls import path
from . import views
urlpatterns=[path("",views.index,name="index")
]
- urlpatterns 是一个列表,包含了一个 path 函数的调用。
- path 函数用于将 URL 路径映射到视图函数。
- “” 表示根路径,即 http://yourdomain/。
- views.index 指定了当用户访问根路径时要调用的视图函数,这里是 index 视图函数。
- name=“index” 是该 URL 模式的名称,可用于在模板或代码中引用该特定的 URL。
URLconf文件中指定创建的polls.urls模块
from django.contrib import admin
from django.urls import include,pathurlpatterns = [path("polls/",include("polls.urls")),path("admin/", admin.site.urls),
]
- urlpatterns = [ … ]: 这是一个 URL 配置列表,定义了 URL 与视图函数或其他 URL 配置之间的映射关系。
- path(“polls/”, include(“polls.urls”)): 这条路由规则指定了当用户访问 polls/ 路径时,Django 将会将** 请求传递给 polls 应用程序的 urls.py 文件来处理**。include(“polls.urls”) 表示将 polls 应用程序中定义的 URL 配置引入到主 URL 配置中,允许在 polls 应用程序中定义更复杂的 URL 结构
URLconf 文件通常位于每个应用程序的根目录下,命名为 urls.py。在这个文件中,我们可以使用 Django 提供的 path() 函数来定义 URL 路由规则。每个路由规则包含一个 URL 路径和一个处理该路径的视图函数或另一个 URL 配置(通过 include() 函数引入其他应用程序的 URLconf)
什么时候用到include :当包括其他URL模式时应使用,admin.site.urls(默认的管理后台URL配置)唯一例外
3、运行服务器
py manage.py runserver
访问http://127.0.0.1:8000/polls/(注意 网页不要访问错) 会出现:

函数path()
path()具有四个参数 两个必须:route & view 。两个可选参数:kwargs & name。
-
path()参数——route
route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。
( ?page=3 只是附加的 GET 参数,Django 不会在 URL 路由匹配中考虑它) -
path()参数——view
django找到一个匹配的准则,就会调用这个特定的视图函数。并传入一个HttpRequest对象作为第一个参数,被“捕获”的参数以关键字的形式传入 -
path()参数——kwargs
任意个关键字参数可以作为一个字典传递给目标视图函数 -
path()参数——name
为你的URL取名,能够在django的任意地方唯一地引用它,尤其是在模板中。
(name 参数为 URL 模式提供了一个唯一标识符,方便在视图和模板中引用。
它支持反向解析,使得生成 URL 更加动态和灵活。
提高了代码的可读性和可维护性,避免了硬编码 URL 带来的问题)
2、模型和管理站点
(1)数据库配置
vote/settings.py 编辑它之前可以先设置时区
TIME_ZONE = “UTC” 表示 Django 项目使用 UTC 作为默认时区。这对于确保时间处理的一致性和可靠性非常有用,特别是在处理跨时区的应用时。如果需要使用其他时区,可以将 TIME_ZONE 设置为相应的时区名称。(TIME_ZONE = “Asia/Shanghai” # 设置为北京时间)

默认开启的某些应用需要至少一个数据表,执行
py manage.py migrate
结果:


Django的迁移代码本质上是个历史记录,可以用来更新or回滚
(2)创建模型
在django里写一个数据库驱动的Web应用的第一步是定义模型——数据库设计和附加的其他元数据
在这个投票应用中需要创建两个模型,Question & Choice

这些概念可以通过一个python类来描述 models.py
class Question(models.Model):question_text = models.CharField(max_length=200)pub_date=models.DateField("data published")class Choice(models.Model):question=models.ForeignKey(Question,on_delete=models.CASCADE)choice_text=models.CharField(max_length=200)votes=models.IntegerField(default=0)

- ForeignKey 字段用于在两个模型之间建立一对多的关系。通过 ForeignKey,每个 Choice 实例都可以引用一个 Question 实例。这意味着一个问题 (Question) 可以有多个选项 (Choice),但每个选项只能属于一个问题。
- on_delete=models.CASCADE 参数指定了当关联的 Question 实例被删除时,所有相关的 Choice 实例也会被自动删除。这有助于保持数据一致性,避免孤立的记录
(3)激活模型
在vote\settings.py中 INSTALLED _APPS=[]添加
"polls.apps.PollsConfig"(别打错)
此时Django项目包含了polls应用,接下来将被修改的模型部分储存为一次迁移
py manage.py makemigrations polls

关于sqlmigrate:

接下来,再次运行migrate 命令,在数据库中创建新定义的模型的数据表

迁移是非常强大的功能,它让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表,使得数据库平滑升级而不丢失数据
总结步骤
- 编辑models.py文件,改变or创建模型——>添加应用
- 运行py manage.py makemigrations 为模型的改变生成迁移文件
- 运行py manage.py migrate 来应用数据库迁移
数据库迁移被分成生成和应用两个命令的原因:
将数据库迁移分为生成和应用两个命令提供了更大的灵活性和控制力,有助于开发者在不同的开发阶段进行细致的管理和操作。通过这种分离,开发者可以生成、审查、测试和应用数据库变更,确保数据库变更过程的安全性、可控性和可追溯性




(4)初试API

- Question.objects.all()会从数据库中获取所有的 Question 对象


总之 models.py 新增:

双下划线__ 是“魔术方法”,可以自动调用
接下来运行py manage.py shell验证修改





将第三个创建的 Choice 对象赋值给变量 c,这样可以在后续的代码中直接访问和操作这个对象

(5)介绍Django管理页面
创建一个管理员账号
py manage.py createsuperuser

(6)启动开发服务器
Djongo的管理界面默认启用。现在启动开发服务器
py manage.py runserver
登录
http://127.0.0.1:8000/admin/

可以通过修改settings.py文件 修改显示语言


(7)进入管理站点页面

(8)向管理页面加入投票应用
要告诉管理,问题Question对象需要一个后台接口显示在index页面里
打开polls/admin.py
from django.contrib import admin
from .models import Question
admin.site.register(Question)
(9)体验便捷的管理功能
现在我们向管理页面注册了问题Question类 django将它显示在索引页面

点击Questions

点击What’s up?来编辑这个问题

保存并添加另一个


点击历史可以看到修改历史

未完待续…
相关文章:
Django文档简化版——Django快速入门——创建一个基本的投票应用程序
Django快速入门——创建一个基本的投票应用程序 准备工作1、创建虚拟环境2、安装django 1、请求和响应(1)创建项目(2)用于开发的简易服务器(3)创建投票应用(4)编写第一个视图1、编写…...
安全防御第三天(笔记持续更新)
1.接口类型以及作用 接口 --- 物理接口 三层口 --- 可以配置IP地址的接口 二层口 普通二层口 接口对 --- “透明网线” --- 可以将一个或者两个接口配置成为接口对,则 数据从一个接口进,将不需要查看MAC地址表,直接从另一个接口出;…...
【12321骚扰电话举报受理中心-短信验证安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
杂项——循迹模块调节方法
1-4 路灰度传感器的调节方法: 调节时探头应对着颜色较浅的上方(如果是黑白线赛道则应该将探头 对着白色上方调),轻轻的将全部可调电阻顺时针拧到底,再逆时针 慢慢回旋,直到对应探头的信号指示灯亮起后&…...
揭秘:源代码防泄密的终极秘籍
在当今信息科技高度发达的时代,源代码作为企业最核心的资产之一,其安全性不言而喻。源代码的泄露可能导致企业技术机密被竞争对手获取,进而威胁到企业的市场竞争力和长远发展。因此,源代码防泄密成为了企业信息安全工作的重中之重…...
avcodec_send_packet函数阻塞
用ffmpeg4.1.4开发一个播放器,解码过程如下,在每个函数前设置标志,测试发现程序阻塞在avcodec_send_packet函数。 while(true){av_read_frameavcodec_send_packetavcodec_receive_frameav_packet_unref } 解释如下: avcodec_se…...
一个parquet-go例子
一个parquet-go例子 使用go读写parquet,使用到了框架github.com/xitongsys/parquet-go 代码: package mainimport ("log""time""github.com/xitongsys/parquet-go-source/local""github.com/xitongsys/parquet-go/parquet&qu…...
扩散模型笔记
长参数“T”决定了生成全噪声图像所需的步长。在本文中,该参数被设置为1000,这可能显得很大。我们真的需要为数据集中的每个原始图像创建1000个噪声图像吗?马尔可夫链方面被证明有助于解决这个问题。由于我们只需要上一步的图像来预测下一步,…...
上海-LM科技(面经)
上海-LM科技 hr电话面 个人简介 个人信息的询问 是否知道芋道框架 技术面 算法题 14. 最长公共前缀(写出来即可) 聊一下Docker Docker核心概念总结Docker实战 聊一下AOP Spring AOP详解 聊一下JWT JWT 基础概念详解JWT 身份认证优缺点分析 Spring…...
用 Echarts 画折线图
https://andi.cn/page/621503.html...
C++的map / multimap容器
一、介绍 在C的map / multimap容器中,所有的元素均是pair类型(有关pair类型可以参考我之前写的 《C的set / multiset容器》的3.2中有介绍到)。 每对pair的第一个元素被称为关键字key,第二个元素被称为值value。因此,ma…...
双向链表 -- 详细理解和实现
欢迎光顾我的homepage 前言 双向链表是一种带头双向循环的链表。在双向链表中,首先存在着一个头结点;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev ;…...
WebGIS面试题
文章目录 1. 前端1.1. 选择器的优先级1.2. CSS 中它的布局有哪些?1.3. CSS3 的新特性1.4. CSS 的两种盒子模型1.5. CSS 的伪元素选择器和伪类选择器有哪些?1.6. ES6 的新特性1.7. 谈谈你对 promise 的理解1.8. 简单说一下原型链1.9. 简单说一下深浅拷贝1…...
代码随想录算法训练营:21/60
非科班学习算法day21 | LeetCode669:修剪二叉搜索树 ,Leetcode108:将有序数组转换为二叉搜索树 ,Leetcode538:把二叉搜索树转换为累加树 介绍 包含LC的两道题目,还有相应概念的补充。 相关图解和更多版本: 代码随想录 (progra…...
数据结构——二叉树之c语言实现堆与堆排序
目录 前言: 1.二叉树的概念及结构 1.1 特殊的二叉树 1.2 二叉树的存储结构 1.顺序存储 2.链式存储 2. 二叉树的顺序结构及实现 2.1 堆的概念 编辑 2.2 堆的创建 3.堆的实现 3.1 堆的初始化和销毁 初始化: 销毁: 插入&…...
#数据结构 链表
单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决:长度固定的问题,插入和删除麻烦的问题 1、逻辑结构: 线性结构 2、存储结构: 链式存储 链表就是将 结点 用链串起来的线性表,链就是 结点 中的…...
单片机软件架构连载(4)-结构体
枚举、指针、结构体,我愿称为C语言"三板斧"。 用人话来讲,几乎所有c语言高阶编程,都离不开这这3个知识点的应用。 今天站在实际产品常用的角度,给大家讲一下结构体。 1.结构体概念 结构体可以用来构建更复杂的数据结…...
工厂方法模式在金融业务中的应用及其框架实现
引言 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法模式使得类的实例化延迟到子类。在金融业务中,工厂方法模式可以用于创建不同类型…...
python库(6):Pygments库
1 Pygments介绍 在软件开发和文档编写中,代码的可读性是至关重要的一环。无论是在博客文章、技术文档还是教程中,通过代码高亮可以使程序代码更加清晰和易于理解。而在Python世界中,Pygments库就是这样一个强大的工具,它能够将各…...
金斗云 HKMP智慧商业软件 任意用户创建漏洞复现
0x01 产品简介 金斗云智慧商业软件是一款功能强大、易于使用的智慧管理系统,通过智能化的管理工具,帮助企业实现高效经营、优化流程、降低成本,并提升客户体验。无论是珠宝门店、4S店还是其他零售、服务行业,金斗云都能提供量身定制的解决方案,助力企业实现数字化转型和智…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
