Django小白级开发入门

1、Django概述

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
Django 框架的核心组件有:

  • 用于创建模型的对象关系映射
  • 为最终用户设计较好的管理界面
  • URL 设计
  • 设计者友好的模板语言
  • 缓存系统

Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。
MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图  。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。

层次职责
模型(Model),即数据存取层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等
模板(Template),即表现层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。
视图(View),即业务逻辑层存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

2、Django项目环境搭建

主要步骤是:

  • 创建并激活虚拟环境
  • 安装Django模块
  • 创建Django项目
  • 创建app应用程序
  • 注册app
  • 编写Django视图
  • 编写Django路由
  • 启动Django项目

(1)创建并激活虚拟环境

cd D:\djangotest #自己创建空文件夹存放项目
python -m venv djangoenv #创建虚拟环境

运行以下命令,激活虚拟环境

cd D:\djangotest
djangoenv\Scripts\activate #激活虚拟环境

(2)安装Django模块

#1激活虚拟环境
cd D:\djangotest
djangoenv\Scripts\activate
#2安装django模块
pip install Django #激活虚拟环境后安装Django模块

上述命令执行后,会把Django模块,安装到了djangoenv/Lib/site-packages 下,也就是说,此Django模块仅仅在虚拟环境中,而不是安装在Python全 局环境。目录如下图所示:

(3)创建Django项目

安装了Django之后,我们就可以使用Django的管理工具------>django-admin了

我们创建一个名称为loginweb的Django项目,命令如下:

#1激活虚拟环境
cd D:\djangotest
djangoenv\Scripts\activate
#2创建一个loginweb的项目
django-admin startproject loginweb

此命令执行后,会在djenv的同级目录,创建一个名称loginweb的Django 项目。目录结构如下图所示:

用Pycharm打开项目,项目结构文件含义如下:

  • 外层的loginweb目录:是项目的容器,Django不关心它的名字,我 们可以将它重命名为任何我们喜欢的名字
  • 里面的loginweb目录:它是一个纯python包。我们可以称呼它为项目的名称,不能随意重命名
  • manage.py :它是Django的一个非常重要的工具,通过它可以调用 django shell和数据库等,如:创建app应用程序、创建数据库表、清 空数据、启动项目等操作
  • settings.py :Django 项目的配置文件。包含了项目的默认设置,包 括数据库信息,调试标志以及其他一些工作的变量
  • urls.py :Django 项目的URL路由声明,负责把URL模式映射到应用 程序
  • wsgi.py:Web服务器网关接口(Python Web Server Gateway Interface的缩写),Python应用和Web服务器之间的一种接口,可以 看成是一种协议、规范。它是基于Http协议的,不支持WebSoket
  • asgi.py:异步网关协议接口,能够处理多种通用的协议类型,包括 HTTP,HTTP2和WebSocket,可以看成ASGI是WSGI的扩展

(4)创建app应用程序

一般一个项目包含多个app应用程序(当然,通用的app也可以在多个项目中使用) 下面我们为loginweb项目,创建login

#1激活虚拟环境
cd D:\djangotest
djangoenv\Scripts\activate
#2切到django项目中
cd loginweb
#3创建一个叫login的应用
django-admin startapp login

上述命令执行后,目录结构如下图所示:

(5)注册app

app应用程序创建以后,必须把app注册到Django,才能够被Django项目所管理。我们只需要把login应用的名称,配置到 loginweb/settings.py文件中即可。如下图所示:

(6)编写Django视图

Django视图的作用:用于接受Web请求并且返回Web响应的简单Python 函数。该函数一般定义在各自应用的views.py文件中。在视图函数中,有 两个重要的对象:请求对象和响应对象。
下面是一个最简单的视图函数:

# 例:在login/views.py 中
from django.http import HttpResponse
# Create your views here.def login(request):return HttpResponse("登录页面")

(7)编写Django路由

Django的路由定义文件为:项目目录urls.py文件。我们所有的路由配置,都以列表的方式,定义在urls.py文件中,添加我们想要的路由。

# 例:在loginweb/urls.py 中
from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [path("admin/", admin.site.urls),path("login/",views.login)
]

(8)启动Django项目

在开发环境下,我们需要在本地启动Django项目,来开发与调试我们的代 码。启动Django项目命令如下:

python manage.py runserver [port]
#[port] 为应用访问端口,可以缺省不写,默认为8000。

此时,我们就可以用浏览器访问我们的项目了。结果如下图所示:

访问我们写好的路由:

3、创建登录页面

在login底下新写建一个templates目录,存放编写的html前端页面。

loginweb -> login -> templates -> login.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title><style>body{text-align:center;}</style>
</head>
<body>
<form action="/login/" method="post">{% csrf_token %}<h1 align="center">登录页面</h1><p class="divs"><label for="username">用户名:</label><input type="text" id="username" name="username" align="center"></p><p class="divs">&nbsp&nbsp&nbsp<label for="password">密码:</label><input type="password" id="password" name="password"></p><input type="submit" value="登录"><span style="color:red">{{ error }}</span>
</form></body>
</html>

loginweb -> login -> templates -> index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>这里是主页</title><style>h1 { color:red }</style>
</head>
<body><h1>这里是主页</h1>
</body>
</html>

loginweb -> login -> views.py

from django.shortcuts import render,redirect
# Create your views here.def login(request):if request.method == 'POST':username = request.POST.get('username')passowrd = request.POST.get('password')if username=='songqin' and passowrd =='123456':return redirect('/index')else:return render(request,'login.html',{"error":"用户名或密码错误"})return render(request,'login.html')def index(request):return render(request,'index.html')

loginweb -> loginweb -> urls.py

from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [path("admin/", admin.site.urls),path("login/",views.login),path("index/",views.index)
]

再次启动Django项目

python manage.py runserver [port]
#[port] 为应用访问端口,可以缺省不写,默认为8000。

访问http://127.0.0.1:8000/login/项目

输入不是用户名密码不是songqin/123456

输入songqin/123456点击登录 跳转到主页面

4、数据库链接

(1)配置mysql

loginweb -> loginweb -> settings.py

默认的数据库配置如下:

DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3","NAME": BASE_DIR / "db.sqlite3",}
}

修改后如下所示:

DATABASES = {"default": {"ENGINE": "django.db.backends.mysql","NAME": "数据库名","USER": "用户","PASSWORD": "密码","HOST": "ip","PORT": "3306"}
}

保存后,系统报错,缺少mysql插件,需要安装mysqlclient

执行以下命令安装:

pip install mysqlclient

python manage.py runserver:然后成功运行。

按这个同样可以运行程序。

(2)自动创建数据库表

在loginweb -> login -> models.py中,添加用户类User_01。子类Meta中定义表的元数据,这里指定了表的名称为f_user_01。

from django.db import models# Create your models here.
class User_01(models.Model):u_id = models.AutoField(primary_key=True)username = models.CharField(max_length=64, null=True)name = models.CharField(max_length=64, null=True)password = models.CharField(max_length=64, null=True)sex = models.CharField(max_length=64, null=True)age = models.CharField(max_length=64, null=True)phone = models.CharField(max_length=64, null=True)email = models.CharField(max_length=64, null=True)unit = models.CharField(max_length=64, null=True)avatar = models.CharField(max_length=64, null=True)status = models.CharField(max_length=64, null=True)create_time = models.CharField(max_length=64, null=True)delete_time = models.CharField(max_length=64, null=True)update_time = models.CharField(max_length=64, null=True)class Meta:db_table = "f_user_01"

执行命令:

# 生成迁移数据
python manage.py makemigrations
# 生成数据库表
python manage.py migrate 

执行完第一个命令,会在loginweb -> login -> migrations下生成初始化文件,仅仅对我们的类做了一个解读。

执行完第二个命令,会在数据库中生成数据库表。

数据库表中生成如下,只有f_user_01是我们要生成的表,上面其他的表都是Django系统默认生成的表,暂且不管。

(3)手工创建表进行映射

上面的方式是通过django自动创建models中定义的表。

现在我们需要手工创建表,然后在models中进行映射。

在数据库中创建表如下:

然后在loginweb -> login -> models.py中,增加代码如下:

class User(models.Model):id = models.AutoField(primary_key=True)name = models.CharField(max_length=30, null=True)age = models.IntegerField(null=True)email = models.CharField(max_length=50, null=True)class Meta:db_table = "user"

直接运行程序即可。

(4)小结

1、配置mysql,需要安装mysqlclient,编写models的实体类,通过迁移命令可以自动生成mysql数据库表结构。

2、如果数据库表中已经创建好表,则只在model.py中创建对应实体类即可,不用执行迁移的两个命令。这里就和java对应上了,直接编写对应实体类和sql即可。

3、如果数据库没有创建好表,可以在models设计好实体类,使用迁移命令即可自动生成mysql数据库表结构。

(5)添加数据

在loginweb -> login -> views.py中,添加代码如下:

def addUser(request):models.User.objects.create(name='linfuchi', age=90, email='i miss you')result = {'code': 0,'msg': 'success','data': ''}return HttpResponse(json.dumps(result, ensure_ascii=False), content_type='application/json')

在loginweb -> loginweb -> urls.py中,添加代码如下:

测试:

数据库表中的信息:

(6)创建默认的表

在loginweb -> login -> models.py中,增加新的类:

class Info(models.Model):title = models.CharField(max_length=100)author = models.CharField(max_length=100)

此时没有通过class Meta指定具体的表名信息。

那么会自动创建表吗?答案是肯定的。

针对python manage.py migrate,提示没有要执行的。

这是因为迁移记录已被标记为已应用。

SELECT * FROM django_migrations;

如果发现 login 应用的 0001_initial 迁移记录已经存在,说明该迁移已经被应用过了。

如果确认 login 应用的 0001_initial 迁移记录不应该存在,你可以手动删除该记录,然后重新执行迁移。

删除语句:

DELETE FROM django_migrations WHERE app = 'login' AND name = '0001_initial';

然后重新执行迁移:

python manage.py migrate

此时,查询数据库可以发现已经有一个新表了:

5、创建自定义命令

在loginweb -> login下创建目录 management,在其下再创建目录commands。

这里就是存放命令的目录,类似于springboot等其他框架技术,遵循“约定大于配置”的原则。

在其下再创建hello.py的文件,整体结构如下:

hello.py的代码如下:

from django.core.management.base import BaseCommandclass Command(BaseCommand):help = 'Prints a simple greeting message'def handle(self, *args, **options):# 在这里编写命令的具体逻辑self.stdout.write(self.style.SUCCESS('Hello, Django!'))

执行命令:

在上述代码中:

help 属性是命令的简短描述,当你运行 python manage.py help hello 时会显示该描述。

handle 方法是命令的核心逻辑,当你运行该命令时,handle 方法会被执行。self.stdout.write 用于输出信息,self.style.SUCCESS 会将输出信息以绿色高亮显示。

6、创建用户

Django自带的管理界面提供了便捷的用户创建功能。

(1)创建超级用户

在项目根目录下,打开命令行终端,执行以下命令:

python manage.py createsuperuser

按照提示输入用户名、邮箱和密码。

(2)创建普通用户

  • 启动服务器:python manage.py runserver
  • 登录管理界面:打开浏览器,访问 http://127.0.0.1:8000/admin/,使用之前创建的超级用户账号和密码登录。
  • 创建新用户:登录成功后,在管理界面中找到 “用户” 选项,点击 “添加” 按钮,输入新用户的用户名、密码等信息,然后点击 “保存” 即可创建新用户。

我们创建了账密为hugh/hugh。

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

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

相关文章

使用 display: flex 实现动态布局:每行两个 item,单数时最后一个占满整行

文章目录 使用 display: flex 实现动态布局&#xff1a;每行两个 item&#xff0c;单数时最后一个占满整行 &#x1f3af;一、需求分析二、实现思路三、代码实现1. HTML 结构2. CSS 样式关键点解析&#xff1a; 四、效果演示HTML 示例&#xff1a;效果&#xff1a; 五、完整代码…

preloaded-classes裁剪

系统预加载了哪些class类&#xff1f;system/etc/preloaded-classes 修改源代码&#xff1f; frameworks\base\config\preloaded-classes 默认位置&#xff0c;如果改了不生效&#xff0c;可能有其它模块的mk文件指定了preloaded-classes覆盖了framework模块&#xff0c;例如…

华为配置篇-OSPF基础实验

OSPF 一、简述二、常用命令总结三、实验3.1 OSPF单区域3.2 OSPF多区域3.3 OSPF 的邻接关系和 LSA 置底 一、简述 OSPF&#xff08;开放式最短路径优先协议&#xff09; 基本定义 全称&#xff1a;Open Shortest Path First 类型&#xff1a;链路状态路由协议&#xff08;IGP&…

Orale数据文件加错位置,你直接rm引发的故障

数据库可能面临硬件故障、人为错误、恶意攻击、自然灾害等多种潜在风险&#xff0c;那么今天这个故障就是由于业务人员加错数据文件的位置&#xff0c;然后直接从物理层面rm -f了&#xff0c;导致了生产的故障&#xff01; 以下是针对Oracle数据库物理删除数据文件后的快速修复…

ChromeDriver下载 最新版本 134.0.6998.35

平时为了下个驱动&#xff0c;到处找挺麻烦&#xff0c;收集了很多无偿分享给需要的人&#xff0c;仅供学习和交流。 ChromeDriver及浏览器134.0.6998.35 ChromeDriver及浏览器133.0.6943.141 ChromeDriver 102.0.5005.61 ChromeDriver 105.0.5195.102 ChromeDriver 108.0…

QEMU源码全解析 —— 块设备虚拟化(2)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(1) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回讲解了几种虚拟化方式(全虚拟化、半虚拟化和硬件辅助虚拟化)的优缺点及其对比…

Redis——缓存穿透、击穿、雪崩

缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中&#xff0c;导致请求直接到了数据库上&#xff0c;根本没有经过缓存这一层。举个例子&#xff1a;某个黑客故意制造我们缓存中不存在的 key 发起大量请求&#xff0c;导致大量请求落到数据库…

DELETE/ UPDATE/ INSERT 语句会自动加锁

在数据库系统中&#xff0c;DELETE、UPDATE 和 INSERT 语句通常会自动加锁&#xff0c;以确保数据的一致性和并发控制。具体的锁类型和效果取决于数据库的实现&#xff08;如 MySQL、PostgreSQL 等&#xff09;以及事务的隔离级别。以下是这些操作通常加锁的行为和效果&#xf…

【从零开始学习计算机科学】硬件设计与FPGA原理

硬件设计 硬件设计流程 在设计硬件电路之前,首先要把大的框架和架构要搞清楚,这要求我们搞清楚要实现什么功能,然后找找有否能实现同样或相似功能的参考电路板(要懂得尽量利用他人的成果,越是有经验的工程师越会懂得借鉴他人的成果)。如果你找到了的参考设计,最好还是…

SpringCloud—概述—01

一、微服务 1&#xff09;单体架构 业务的所有功能实现都打包在一个 war 包或者 jar 包中&#xff0c;这种方式就称为 单体架构 例如&#xff0c;学校中实现的博客系统&#xff0c;前端后端数据库实现&#xff0c;都是在一个项目中 把所有模块都写在一个 web 项目中&#x…

C++ 学生成绩管理系统

一、项目背景与核心需求 成绩管理系统是高校教学管理的重要工具,本系统采用C++面向对象编程实现,主要功能模块包括: 学生信息管理(学号/姓名/3门课程成绩) 成绩增删改查(CRUD)操作 数据持久化存储 统计分析与报表生成 用户友好交互界面 二、系统架构设计 1. 类结构设计 …

go的grpc

GRPC介绍 目录 单体架构微服务架构问题原始的grpc 服务端客户端原生rpc的问题 grpc的hello world 服务端客户端 proto文件proto语法 数据类型 基本数据类型其他数据类型 编写风格多服务 单体架构 只能对整体扩容一荣俱荣&#xff0c;一损俱损代码耦合&#xff0c;项目的开…

1.12.信息系统的分类【ES】

专家系统&#xff08;ES&#xff09;技术架构深度解析 一、ES核心定义 &#x1f9e0; 智能决策中枢 由三大核心能力构建的领域专家模拟系统&#xff1a; 存储专家级领域知识&#xff08;10^4规则量级&#xff09;支持不确定性推理&#xff08;置信度>85%&#xff09;动态…

考研数一非数竞赛复习之Stolz定理求解数列极限

在非数类大学生数学竞赛中&#xff0c;Stolz定理作为一种强大的工具&#xff0c;经常被用来解决和式数列极限的问题&#xff0c;也被誉为离散版的’洛必达’方法&#xff0c;它提供了一种简洁而有效的方法&#xff0c;使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…

html播放本地音乐

本地有多个音乐文件&#xff0c;想用 html 逐个播放&#xff0c;或循环播放&#xff0c;并设置初始音量。 audio 在 html 中播放音乐文件用 audio 标签&#xff1a; controls 启用控制按钮&#xff0c;如进度条、播放、音量、速度等。不加不显示任何 widget。autoplay 理应启…

DeepSeek-Manus精品课合集【附下载】

AI消息不断&#xff0c;继DeepSeek之后&#xff0c;又出了一个颠覆性的AI产品Manus&#xff0c;号称全球第一个通用型AI。相比与DeepSeek&#xff0c; Manus拥有更强的自主性和执行力。 如果说DeepDeek是一个最强大脑&#xff0c;那么Manus就是一个完整的人&#xff01; DeepS…

MySQL复习笔记

MySQL复习笔记 1.MySQL 1.1什么是数据库 数据库(DB, DataBase) 概念&#xff1a;数据仓库&#xff0c;软件&#xff0c;安装在操作系统&#xff08;window、linux、mac…&#xff09;之上 作用&#xff1a;存储数据&#xff0c;管理数据 1.2 数据库分类 关系型数据库&#…

从源到目标:深度学习中的迁移学习与领域自适应实践

引言&#xff1a;数据驱动的智能时代与迁移挑战 在深度学习快速发展的今天&#xff0c;模型训练对数据量和质量的依赖成为核心瓶颈。面对新场景时&#xff0c;标注数据不足、数据分布差异等问题常导致模型性能骤降。迁移学习&#xff08;Transfer Learning&#xff09;与领域自…

【网络】HTTP协议、HTTPS协议

HTTP与HTTPS HTTP协议概述 HTTP&#xff08;超文本传输协议&#xff09;&#xff1a;工作在OSI顶层应用层&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信,B/S模式 无状态&#xff1a;每次请求独立&#xff0c;服务器不保存客户端状态&#xff08;通…

Jmeter使用介绍

文章目录 前言Jmeter简介安装与配置JDK安装与配置JMeter安装与配置 打开JMeter方式一方式二 设置Jmeter语言为中文方法一&#xff08;仅一次性&#xff09;方法二(永久设置成中文) Jmeter文件常用目录 元件与组件元件组件元件的作用域元件的执行顺序第一个案例添加线程组添加 H…