Django框架丨从零开始的Django入门学习

Django 是一个用于构建 Web 应用程序的高级 Python Web 框架,Django是一个高度模块化的框架,使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。

每个 Django App 的组织结构符合 Django 的 MTV 法则——Model(模型)+ Template(模板)+ View(视图),文章内容将从安装开始,对Django每一个模块的操作进行简单的讲解

1. 安装Django

想必大家肯定都安装好python了,如果没有的话网络上很多教程可以参考,安装好python后可以直接在命令行安装Django

pip install django

安装完成后,你可以通过运行以下命令验证 Django 是否成功安装:

python -m django --version

或通过import进行检查

2. 创建项目

2.1 命令行新建项目

通过终端进入到需要创建项目的指定目录,通过Django的django-admin.py命令新建工程

cd Django
django-admin startproject Hellodjango

文件组成

django_news
├── django_news              // 项目全局文件目录
│   ├── __init__.py
│   ├── asgi.py.py           // ASGI 兼容的 Web 服务器的入口(异步接受网络请求)
│   ├── settings.py          // 全局配置,包括链接数据库等操作
│   ├── urls.py              // 全局路由URL 声明
│   └── wsgi.py              // WSGI 兼容的 Web 服务器的入口(同步接受网络请求)
└── manage.py                // 项目管理脚本

2.2启动服务器(runserver)

创建好后先尝试启动服务器看是否成功

# 不定义端口号默认为8000
python manage.py runserver
python manage.py runserver 8888
# 0.0.0.0 让其它电脑可连接到开发服务器
python manage.py runserver 0.0.0.0:8888

上面三句都可以启动服务,见到以下欢迎页面就是安装创建成功了(Django 开发服务器可以保持开启,修改代码会自动重新加载,不需要重新启动服务器,非常方便。)

3 新建应用(startapp)

新建一个App——相当于功能的划分,一个 Django 应用由多个子应用组成,一般称之为 App。

python manage.py startapp new01

新建app的文件夹结构如下:

new01                     // news 应用目录
├── migrations           // 数据库迁移变更记录
│   └── __init__.py      
├── __init__.py          // 初始化模块
├── admin.py             // 默认自带的后台管理配置
├── apps.py              // 应用配置
├── models.py            // 数据模型、数据库操作等
├── tests.py             // 单元测试
└── views.py             // 视图,url里的函数在这里找

3.1 加入配置文件

在Hellodjango/settings.py中找到 INSTALLED_APPS,加入新建app的config

3.2 第一个页面

3.2.1 视图(view)

打开new01/views.py,写一个简单的index,相当于写了一个页面

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.def index(request):return HttpResponse('Hello Django!')
3.2.2 接入路由

下一步是让路由系统能够访问到刚才写好的视图函数,也就是将页面加入到网页中

在Hellodjango/urls.py中,修改Django自带的urlpatterns,通常接收以下三个参数

route:必须,即实际的访问路由,空字符串等于 /,即空路由,展示为首页
view:必须,该路由将要访问的view视图
name:可选,该路由的名称,方便后续在模板中使用from new01 import viewsurlpatterns = [# path('admin/', admin.site.urls),path('index/', views.index)
]

不过当然一个系统的页面会有很多,网页编辑好了之后将路由加到urls.py的urlpatterns中就可以了

可以看到urls.py文件中,有一行path(‘admin/’, admin.site.urls),取消注释访问http://127.0.0.1:8888/admin已经可以看到后台系统的登录页面

但此时还没有连接数据库,其余内容到后面讲述4.数据库的时候再进行操作

3.3 加入网页(templates,render)

在django项目目录下新建一个templates文件夹,文件夹下面放入html文件

把templates加入到路径中(settings.py的TEMPLATES),因为默认情况下会放到app下的templates里面

写一个简单的网页web01.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset=="UTF-8"><title>Title</title>
</head>
<body><div>This is a web</div>
</body>
</html>

将网页写入到views.py中:在这里我们使用render函数,第一个参数为request,第二个参数是文件名,第三个参数可以不要,是把文件中用{{}}标起来的内容替换的功能。

def web01(request):return render(request, "web01.html")

再添加到urls.py

from new01 import viewsurlpatterns = [# path('admin/', admin.site.urls),path('index/', views.index),path('web/', views.web01)
]

此时输入网址,可以看到网页接入成功,其他的样式等可以按照CSS 、html的语法进行添加修改web01.html文件

此时输入端口号,可以看到对应的两个页面都在

4.数据库

Django 的 MTV,我们已经讲了 T(Template)和 V(View),到了最后一个 M(Model)了。数据模型是 Django 入门最大的难点,这一步之后便能真正上手 Django 开发。下面我们先介绍一下 Django 的数据模型设计。

Django 在数据模型方面的特点:

  • 由于高度解耦的设计,可轻松切换各种关系型数据库(默认的 SQLite,可选 MySQL、PostgreSQL、Oracle 等等)
  • 强大的 ORM(Object Relation Mapping,对象关系映射)模块,使得用 Python 操作数据库非常轻松,免去了使用 SQL 的麻烦
  • 优秀的数据库迁移机制(Migration),修改数据模式(Schema)比较方便,能够适应不断变化的功能需求

4.1 开发流程

一般数据模型开发流程如下:

  1. 用 Django 定义一个新的数据模型(在new01/models.py中)
  2. makemigrations命令创建迁移文件(存储在子应用的 migrations 目录里面)
  3. migrate命令执行迁移
    (如后续发现定义有问题或不完善,可以更新数据模型,再重新进行23操作完成数据迁移)

4.2 实现一个简单的模型

4.2.1 创建数据模型

在new01/models.py中,定义数据模型以及你需要的字段,可以先随便定义两个简单的字段进行尝试,代码如下:

from django.db import models
# Create your models here.class Post(models.Model):# 根据模型自动值数据库中创建一个对应的表,此表包括title, name两个字段title = models.CharField(max_length=50)name = models.CharField(max_length=50)def __str__(self):return self.title

定义好后再命令行执行如下命令,创建迁移文件:

python manage.py makemigrations 

通过输出可以看到,成功创建了 new01/migrations/0001_initial.py 迁移脚本,再进行下一步数据库迁移:

python manage.py migrate

数据库迁移完成后,我们就可以创建用于登录后台管理的超级用户:

python manage.py createsuperuser

按照提示步骤输入用户名和密码创建成功就行

4.2.2 后台管理配置

此时再输入前面提到的http://127.0.0.1:8888/admin后台管理页面,就可以通过刚刚创建的超级用户登录查看了

但进入页面可以看到,没有我们创建的应用和模型:

这是因为没有实现后台管理的接口配置,在文件new01/admin.py中接口配置如下:

from django.contrib import admin
from .models import Post
# Register your models here.admin.site.register(Post)

再刷新页面可以看到应用new01和模型Posts

点击 Posts 一栏的 +Add 按钮,随便添加几条数据,也可以看看修改、添加、删除等功能。

4.2.3 视图与数据连接

新建一个网页html文件,这里用先前用于测试的web01.html

在views.py中绑定好页面与数据

from django.shortcuts import render
from .models import Postdef show_name(request):context = {'name_list': Post.objects.all()}return render(request, 'web01.html', context=context)

中html文件中写好渲染数据的语法:

<!DOCTYPE html>
<html lang="en">
<head><meta charset=="UTF-8"><title>Title</title>
</head>
<body>{% if name_list %}<ul>{% for elem in name_list %}<li><h3>{{ elem.title }}</h3><p>{{ elem.name }}</p></li>{% endfor %}</ul>{% else %}<p>no data</p>{% endif %}
</body>
</html>

最后不要忘记中urls.py中添加新设置好的视图

from django.urls import path
from new01 import viewsurlpatterns = [path('name/', views.show_name),
]

最后访问定义好的路由http://127.0.0.1:8888/name,就可以看到刚才在后台管理系统中添加的数据了

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

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

相关文章

《Kettle保姆级教学-核心概念解析》

目录 一、什么是ETL&#xff1f;1、ETL 的三个主要阶段2、ETL 的应用场景3、ETL 工具 二、什么是Kettle&#xff1f;1、Kettle 的核心功能2、Kettle 的主要组件3、Kettle 的优点4、Kettle 的应用场景 三、Kettle核心概念1. 转换&#xff08;Transformation&#xff09;2. 作业&…

DeepSeek:全栈开发者视角下的AI革命者

目录​​​​​​​ DeepSeek&#xff1a;全栈开发者视角下的AI革命者 写在前面 一、DeepSeek的诞生与定位 二、DeepSeek技术架构的颠覆性突破 1、解构算力霸权&#xff1a;从MoE架构到内存革命 2、多模态扩展的技术纵深 3、算法范式的升维重构 4、重构AI竞争规则 三、…

https是如何保证安全的,又是如何保证不被中间人攻击的?

HTTPS如何保证安全&#xff0c;以及如何防止中间人攻击 保护用户隐私和数据安全已经成为了一个不可忽视的问题。随着网络攻击的不断升级&#xff0c;HTTPS&#xff08;超文本传输安全协议&#xff09;成为了我们在网络上交流时的一道重要防线。以下是HTTPS是如何保证安全的&am…

Linux设备树(DTS)入门学习

前言&#xff1a; Linux设备树(DTS)入门学习&#xff0c;资料搜集。从零开始入门学习Linux设备树 Device Tree (DTS)&#xff0c;建议的学习流程如下&#xff1a; 1. 讯为电子在哔站上的-Linux设备树视频教程&#xff08;嵌入式学习之Linux驱动&#xff08;第七期_设备树_全新…

Node.js学习指南

一、模块化规范 nodejs使用的模块化规范 叫做 common.js 规范: 每一个模块都有独立的作用域 代码在各自模块中执行 不会造成全局污染 每一个模块都是一个独立的文件&#xff08;module对象&#xff09; 模块可以被多次加载&#xff08;module.exports 属性&#xff09; 但是仅…

98.2 AI量化开发:基于DeepSeek打造个人专属金融消息面-AI量化分析师(理论+全套Python代码)

目录 0. 承前1. 金融工程结构图2. Why is DeepSeek3. 项目实现代码3.1 导入python库3.2 参数设置3.3 获取数据3.4 数据处理3.5 AI人设提示词3.6 Messages构建3.7 AI Agent3.8 response格式处理3.9 汇总函数3.10 运行案例 4. 总结4.1 系统优点4.2 系统缺点4.3 可提升方向 0. 承前…

用python实现进度条

前言 在Python中&#xff0c;可以使用多种方式实现进度条。以下是几种常见的进度条格式的实现方法&#xff1a; 1. 使用 tqdm 库 tqdm 是一个非常流行的库&#xff0c;可以轻松地在循环中显示进度条。 from tqdm import tqdm import time# 示例&#xff1a;简单的进度条 fo…

Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【蓝桥杯嵌入式】LED

1、电路图 74HC573是八位锁存器&#xff0c;当控制端LE脚为高电平时&#xff0c;芯片“导通”&#xff0c;LE为低电平时芯片“截止”即将输出状态“锁存”&#xff0c;led此时不会改变状态&#xff0c;所以可通过led对应的八个引脚的电平来控制led的状态&#xff0c;原理图分析…

Vue.js组件开发-实现广告图片浮动随屏幕滚动

实现步骤 创建 Vue 项目&#xff1a;使用 Vue CLI 快速搭建一个新的 Vue 项目。编写 HTML 结构&#xff1a;在 Vue 组件中定义广告图片的 HTML 结构。添加 CSS 样式&#xff1a;设置广告图片的初始样式和浮动效果。添加 JavaScript 逻辑&#xff1a;监听窗口滚动事件&#xff…

苹果再度砍掉AR眼镜项目?AR真的是伪风口吗?

曾经&#xff0c;AR游戏一度异常火热&#xff0c;宝可梦go让多少人不惜翻墙都要去玩&#xff0c;但是也没过去几年&#xff0c;苹果被曝出再度砍掉了AR眼镜项目&#xff0c;面对着市场的变化&#xff0c;让人不禁想问AR真的是伪风口吗&#xff1f; 一、苹果再度砍掉AR眼镜项目&…

关于deepseek的一些普遍误读

最近deepseek成为全球最热门的话题&#xff0c;甚至没有之一&#xff0c;无论是北美&#xff0c;欧洲&#xff0c;各大IT巨头&#xff0c;各个投资机构&#xff0c;政府官员&#xff0c;乃至脱口秀演员&#xff0c;都在不断提及这个话题&#xff0c;而国内&#xff0c;自媒体也…

Vue 3 30天精进之旅:Day 15 - 插件和指令

欢迎来到“Vue 3 30天精进之旅”的第15天&#xff01;今天我们将深入探讨Vue 3中的插件和自定义指令。这两个主题能够帮助我们扩展Vue的功能&#xff0c;使我们的应用更加灵活和强大。 一、插件概述 1. 什么是插件&#xff1f; 在Vue中&#xff0c;插件是一种功能扩展机制。…

PostgreSQL 数据库备份与还原

为了安全与数据共享等&#xff0c;创建好的数据库有时候需要备份操作和还原操作。数据库的备份与还原主要是三个命令&#xff1a;pg_dump、pg_dumpall 和 pg_restore 。 其中pg_dump用于备份单个数据库&#xff0c;它支持多种备份格式&#xff08;SQL、自定义等&#xff09;&a…

排序算法--计数排序

唯一种没有比较的排序(指没有前后比较,还是有交换的)。统计每个元素出现的次数&#xff0c;直接计算元素在有序序列中的位置&#xff0c;要求数据是整数且范围有限。适用于数据为小范围整数&#xff08;如年龄、成绩&#xff09;&#xff0c;数据重复率较高时效率更优。可用于小…

Ubuntu重启搜狗输入法

Ubuntu的搜狗输入法重启_ubuntu sogou reset-CSDN博客 # fictx自带的重启 fcitx -r

C#结合html2canvas生成切割图片并导出到PDF

目录 需求 开发运行环境 实现 生成HTML范例片断 HTML元素转BASE64 BASE64转图片 切割长图片 生成PDF文件 小结 需求 html2canvas 是一个 JavaScript 库&#xff0c;它可以把任意一个网页中的元素&#xff08;包括整个网页&#xff09;绘制到指定的 canvas 中&#xf…

java进阶专栏的学习指南

学习指南 java类和对象java内部类和常用类javaIO流 java类和对象 类和对象 java内部类和常用类 java内部类精讲Object类包装类的认识String类、BigDecimal类初探Date类、Calendar类、SimpleDateFormat类的认识java Random类、File类、System类初识 javaIO流 java IO流【…

static成员变量的本质?静态变量?静态类有什么意义?全局变量?类函数?

static成员变量的本质 面向对象编程语言喜欢将全局变量转移到类内部变成static变量&#xff0c;看起来不像全局变量。事实上&#xff0c;编译器会将static成员变量和全局变量看做的一样的&#xff0c;编程语言的写法减少程序员随意操作全局变量的可能&#xff0c;虽然事实上它们…

RK3566-移植5.10内核Ubuntu22.04

说明 记录了本人使用泰山派&#xff08;RK3566&#xff09;作为平台并且成功移植5.10.160版本kernel和ubuntu22.04&#xff0c;并且成功配置&连接网络的完整过程。 本文章所用ubuntu下载地址&#xff1a;ubuntu-cdimage-ubuntu-base-releases-22.04-release安装包下载_开源…