准备工作+1、请求和响应+2、模型和管理站点

news2024/9/25 9:37:28

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,path

urlpatterns = [
    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 命令,在数据库中创建新定义的模型的数据表
在这里插入图片描述

迁移是非常强大的功能,它让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表,使得数据库平滑升级而不丢失数据

总结步骤

  1. 编辑models.py文件,改变or创建模型——>添加应用
  2. 运行py manage.py makemigrations 为模型的改变生成迁移文件
  3. 运行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?来编辑这个问题
在这里插入图片描述
保存并添加另一个
在这里插入图片描述
在这里插入图片描述
点击历史可以看到修改历史
在这里插入图片描述
未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python(四)---序列

文章目录 前言1.列表1.1.列表简介1.2.列表的创建1.2.1.基本方式[]1.2.2.list()方法1.2.3.range()创建整数列表1.2.4.推导式生成列表 1.3. 列表各种函数的使用1.3.1.增加元素1.3.2.删除元素1.3.3.元素的访问和计数1.3.4.切片1.3.5.列表的排序 1.4.二维列表 2.元组2.1.元组的简介…

mybatis基础语法

Mybatis快速入门 1.需求 使用MyBatis查询所有的用户, 封装到List集合 2.分析 创建maven工程(jar),添加坐标创建pojo创建UserDao接口创建UserDao映射文件创建Mybatis核心配置文件SqlMapConfig.xml编写java代码测试 3.实现 准备工作&…

《梦醒蝶飞:释放Excel函数与公式的力量》11.3 ISTEXT函数

第11章:信息函数 第三节 11.3 ISTEXT函数 11.3.1 简介 ISTEXT函数是Excel中的一个信息函数,用于检查指定单元格中的内容是否为文本。如果单元格内容是文本,则返回TRUE;否则返回FALSE。ISTEXT函数在数据验证、条件格式化和逻辑判…

【排序算法】插入排序(希尔排序)

目录 一.直接插入排序 1.基本思想 2.实现 3.特性 1.效率 2.时间复杂度:O(N^2) 3.空间复杂度:O(1) 4.稳定性:稳定 二.希尔排序 1.基本思想 2.实现 3.特性 1.效率 2.时间复杂度:O(N^1.3) ​编辑 3.空间复杂度&#xff…

AI在软件开发中的角色:辅助创新还是自动化取代?

文章目录 每日一句正能量前言:人工智能与软件开发的未来交汇点AI工具现状AI对开发者的影响工作方式的改变需要掌握的新技能保持竞争力的策略结论 AI开发的未来AI在软件开发领域的未来发展方向AI是否可能完全取代开发者如何在AI时代规划开发者的职业发展结论 后记&am…

【通过pnpm创建vite项目】

vue3最新项目技术构建后台管理系统 一、技术要求二、安装pnpm2.1 构建vite三、项目配置3.1 eslint 配置3.2 prettier配置3.3 stylelint配置3.4 配置husky3.5 配置commitlint3.6 pnpm 强制安装四、Element-plus 引入4.1 完整引入4.2 国际化配置4.3 配置别名4.4 Env环境配置4.5 s…

教育与社会的发展

生产力与教育的关系 政治经济制度与教育的关系 文化和人口与教育的关系

《梦醒蝶飞:释放Excel函数与公式的力量》11.4 ISERROR函数

第11章:信息函数 第四节 11.4 ISERROR函数 11.4.1 简介 ISERROR函数是Excel中的一个信息函数,用于检查指定单元格或表达式是否产生错误。如果单元格或表达式产生任何类型的错误(如N/A、VALUE!、REF!等),则返回TRUE&…

子任务:IT运维的精细化管理之道

在当今的企业运营中,信息技术已成为支撑业务发展的核心力量。根据Gartner的报告,IT服务管理(ITSM)的有效实施可以显著提升企业的运营效率,降低成本高达15%,同时提高服务交付速度和质量。随着业务的复杂性和…

Python中对asyncio的实际使用

前言:一般涉及异步编程我都无脑用celery,但是最近在做一个项目,项目不大,也不涉及定时任务,所以就用了asyncio。 asyncio是python自带的模块,比celery轻量,使用起来也简单。以前学习过&#xf…

java中Error与Exception的区别

java中Error与Exception的区别 1、错误(Error)1.1 示例 2、 异常(Exception)2.1 示例 3、 区别总结 💖The Begin💖点点关注,收藏不迷路💖 当我们谈论编程中的错误(Error&…

【LeetCode】917:翻转字符串

方法&#xff1a;双指针 class Solution { public:bool isletter(char ch){if(ch>a&&ch<z)return true;if(ch>A&&ch<Z)return true;return false;}string reverseOnlyLetters(string s) {int lens.size();int left0,rightlen-1;string s1;while(le…

60、基于浅层神经网络的数据拟合(matlab)

1、基于浅层神经网络的数据拟合的简介、原理以及matlab实现 1&#xff09;内容说明 基于浅层神经网络的数据拟合是一种常见的机器学习方法&#xff0c;用于通过输入数据来拟合一个非线性函数。这种方法通常包括一个输入层、一个或多个隐藏层和一个输出层。神经网络通过学习权…

【HarmonyOS】获取通讯录信息

【HarmonyOS】获取通讯录信息 一、问题背景&#xff1a; 在Android和IOS中&#xff0c;获取手机通讯录信息的方式&#xff0c;一般是申请通讯录权限后&#xff0c;获得手机所有的通讯录列表信息。 在鸿蒙中&#xff0c;因为权限方式安全性提高的变更&#xff1a;将用户权限限…

南京邮电大学运筹学课程实验报告1 图与网络求解 指导

一、题目描述 实验四 图与网络问题求解    实验属性&#xff1a; 设计型    实验目的 1&#xff0e;理解图的基本概念&#xff1b; 2&#xff0e;掌握运筹学软件的使用方法&#xff1b; 3. 掌握图中Dijkstra算法Matlab求解原理和方法。 …

系统概括javaScript运算符

目录 一.前言 二.算术运算符 三.前置后置递增运算符 四.比较运算符 五.逻辑运算符 六.各类运算符的优先级 一.前言 运算符通常被称为操作符&#xff0c;是用于实现赋值&#xff0c;比较和执行算术运算等功能的符号。 主要包括算术运算符&#xff0c;比较运算符&#xff0…

Vue 3 中创建一个动态的组件实例

本文将介绍如何在 Vue 3 中实现一个动态 Toast 组件实例。我们将创建一个简单的 Toast 组件&#xff0c;并使用一个动态创建实例的脚本来显示 Toast 消息。在 Vue 3 中创建动态组件实例有许多好处&#xff0c;这些好处主要体现在灵活性、性能、可维护性和用户体验等方面。 创建…

备考美国数学竞赛AMC8和AMC10:吃透1850道真题和知识点

距离接下来的AMC8、AMC10美国数学竞赛还有几个月的时间&#xff0c;实践证明&#xff0c;做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;…

【python】PyQt5顶层窗口相关操作API原理剖析,企业级应用实战分享

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

2023年全国大学生电子信息竞赛E题——自动追踪系统(stm32和openmv+普通舵机)完美解决第四问

当时做的时候&#xff0c;当时看别人开源的23年的题&#xff0c;感觉一头雾水。两个字没思路。确实只有做了才会有思路。我这里清晰的整理出来思路。 1.第一问的复位问题就是写一个函数&#xff0c;如果按键按下&#xff0c;就进入&#xff0c;再按下就退出 当然这个复位是写死…