Django框架-基础篇
Django框架简介
一、软件架构模式MVC和MTV
1、MVC模型
MVC(model view controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(model)、视图(view)和控制器(controller),具有耦合性低,重用性高,生命周期成本低等优点。
2、MTV模型
Django框架的设计模式借鉴了MVC框架的思想,也是分别三部分,来降低各个部分之间的耦合性。
Django的MTV分别代表:
Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM)
Template(模板):放所有的html文件,负责如何把页面展示给用户
模板语法:目的是将自变量(数据库的内容)如何巧妙的嵌入到html页面中
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个URL分发器。它的作用是将一个个URL的页面请求分别发给不同的Views处理,Views再调用相应的Model和Template。
3、MVC和MTCV的比较
二、Django 下载安装
查看django版本:
cmd——>python -m django --version
pycharm——> import django ; print(django.version)
命令行下载安装:
dos窗口中: pip install django== 1.11.15 # 等号后为版本号,不加的话默认安装最新版本 pip install -i https://pypi.doubanio.com/simple/ django==1.11.15(或者-i 指定源)
pycharm的方式安装
打开pycharm -->file -->settings --> project interpreter --> 点击右侧绿色加号 -->在弹出对话框中输入django -->选中specify version,指定下载版本,默认最高版 -->最后点击左下角 install package
注:默认从https://pypi.python.org/simple下载模块,可更改国内的豆瓣源,点击install package 右侧的Manage Repositories 在里面添加其它的源,如https://pypi.doubanio.com/simple/
详细见下图:
三、创建Django项目对象
命令行创建:
切换目录到预存放项目文件的文件目录 django-admin startproject 项目名称 eg: django-admin startproject myblog
生成目录结构如下:
- manage.py------启动文件 (Django项目里面的工具,通过它可以调用Django shell的数目和数据库等)
- settings.py------包含了项目的一些设置,包括数据库信息、调试标志以及其他一些工作的变量。
- urls.py-----------路径与视图函数的映射关系
- wsgi.py ...........帮我们实现socket,响应http请求
注:命令行创建,不会创建templates模板【用于仅存放html文件,css,js等静态文件放到新建的static目录中】,
需要自己在项目根目录即与manage.py同级目录下创建templates文件夹,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,'templates')
pycharm方式创建
打开pycharm--->file ---->new project ---> 选中django
创建完成后项目目录结构如下:
注:上面app01为创建的一个应用,Mysite为创建django目录时,自动在项目名下建立一个同名的目录。
四、启动Django项目
1、命令行方式
切换到django项目根目录下(含有manage.py 的文件) # 默认为本地,端口为8000 python manage.py runserver # 127.0.0.1:8000 # 可修改端口 python manage.py runserver 80 # 127.0.0.1:80 # 可修改ip和端口,4个零表示所有人都可以访问 python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80 注:当项目上线后,需将ip和端口改为实际的
2、pycharm方式
一个项目就是一个包,不要单独执行某个py文件,而是运行整个项目
五、创建应用
注:因为一个项目要实现多个功能,因此一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码
如果不建立app也可以执行项目,即视图函数直接写在urls.py中,在settings.py中配置相关的模板,数据库信息,静态文件等信息。
命令行创建app
python manage.py startapp 应用名
eg: python manage.py startapp app01
执行命令后,项目目录下多出一个app01的文件夹,目录结构如下:
app01/
migrations 记录修改models即orm操作数据库的更改信息,每次更改都会在改目录下新建一个文件
__init__.py
__init__.py
admin.py
apps.py 记录app信息,当在settings.py中注册app时是从此处找
models.py 记录创建类【即相当如向数据库中创建表】在此处创建
tests.py
views.py 本app自己的业务逻辑函数即视图函数写在这里
使用PyCharm创建
可以使用PyCharm的manage.py工具来执行命名。在主菜单栏中选择Tools,在下拉菜单中选择Run manage.py task,会出现如下图所示的工具对话框:
在弹出的命令窗口中直接输入下面的命令便可创建app:
startapp app01
使用PyCharm的manage.py工具执行命令时,只用输入命令及参数即可,不再输入python manage.py了。
注册app应用
创建完app后,想要使用,需先注册才能使用,在django根目录下的settings.py文件中的INSTALLED_APPS模块中注册app信息
格式如下:
应用名.apps.应用名Config
示例:【本质是导入应用目录下apps中为app建立的类】
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'classModel.apps.ClassmodelConfig'
]
apps.py文件内容如下图:
六、配置django项目与数据库mysql的连接
1、安装mysql数据库软件
2、安装 模块pymysql【python3.6后连接mysql只能用pymysql】
cmd--> pip3 install pymysql
3、手动连接数据库,创建一个库及创建一个操作此数据库的用户,赋予权限【django的ORM只能创建表,不能创建库】
# 创建库
create database db_name charset utf8;
# 创建用户及赋予权限
grant all privileges on db_name.* to 'userName'@'ip' identified by 'pwd';
4、在Django项目总配置文件setting.py同级目录下[不是app下的__init__]的__init__.py文件中配置项目使用pymysql来操作数据库
import pymysql
pymysql.install_as_MySQLdb() # 告知django使用pymysql来连接书库
5、在Django项目总配置文件setting.py中的DATABASES模块中配置连接数据库相关信息,格式如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 修改数据库引擎,默认为sqlite3文本数据库
'NAME': 'db_name',
'USER': '**',
'PASSWORD':'***',
'HOST':'ip',
'PORT': 3306, # 注意是数字,不是字符串
}
}
6、建表 在应用app的目录下的models.py中写类【必须继承models.Model类】
from django.db import models # 需先导入models模块
class Class(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20, unique=True)
def __str__(self):
return self.name
# 在orm中
类 对应数据库中的 表
对象 对应数据库中的 记录(数据行)
属性 对应数据库中的 字段
7、建好类即表后,执行数据库迁移命令【让创建的表在数据库中生成】
# 记录models.py中类是不是有变化 将变化的内容记录下来
python manage.py makemigrations
# 将model的变更同步到数据库中
python manage.py migrate
注:执行第一条命令后models.py中的变化就会在到migrations目录中创建一个新的文件并将变化写入其中
如果在原有表张增加字段的话,会提示要设置默认值,因为新的那列数据不能为空
七、项目启动后相关配置
1、更改setting.py
1.1、检查项目BASE_DIR是否如下:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
1.2、配置ALLOWED_HOSTS可以运行本项目的ip,'*' 代表所有
ALLOWED_HOSTS = ['*',‘127.0.0.1’,‘192.168.19.66’]
注:如想别人访问你的网站,需在启动项目时将ip配置为0.0.0.0,如何将运行项目的ip写入上面列表,用户就可以通过你的主机ip访问你的网站了
1.3、配置INSTALLED_APPS,为创建的应用app进行注册,不然操作数据库时报错
格式:'app_name.Apps.AppName.Config' 或 ‘app_name’
INSTALLED_APPS = [
'classModel.apps.ClassmodelConfig'
]
1.4、配置中间件MIDDLEWARE,注释csrf,让后台能够接收所有的post请求,不关闭django将对不合法的post拦截403
将 'django.middleware.csrf.CsrfViewMiddleware'注释掉,否则会出现下面的情况。
注:上面的方案,不建议使用,不安全,可以在html文件中要发送post请求的from表单里加入{% csrf_token %}就不用注释上面的csrf的中间件了
如下图:
前端实际效果为:
1.5、配置模块templates 中的DIRS需要检查下是否为空,如果为空,添加上os.path.join(BASE_DIR,'templates')
命令创建的项目未创建模板templates目录,需自己创建。
这是模板中没有设置,设置模板在python安装目录中找到如下图的路径,打开settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,'templates')。下次创建项目就可不再手动添加。
1.6、settings.py中增加静态文件目录STATICFILES_DIRS【(js,css,image)存放目录】,这是放在templates中html文件能够使用js,css资源的关键
在项目根目录即与manage.py文件同级下创建静态文件夹static,如果有多个就创建多个,但网页中不论是放在那个文件中,开始都以/static/开头
1.7、templates文件夹下创建/或存放HTML文件,将html的js,css,imgs等文件放入images
2、编辑urls.py文件,增加映射关系。
业务函数的实现,业务函数与url的映射可都在此文件中书写,以后规范化,可将业务函数移入到应用的views.py中,此文件仅编辑业务函数与url的映射关系,再导入views.py中所有的业务函数
即from app名 import views
下图为:直接将视图函数写在全局urls.py文件中
八、访问web
1、局域网中的浏览器输入HTTP://IP:PORT/login 就可访问验证。
九、如何完全的删除一个应用app?
1.删除models.py
无论是删除一个单独的model还是删除整个App,都需要首先删除models.py文件中的模型。
确认没有其他文件引用models.py中的类。
迁移或者删除你的数据库,Django提供了简便的方法方便用户删除某App下的所有数据(Django 1.7)。
python manage.py migrate your_app_name zero
删除models.py中的数据模型。
2.删除App
再次确认其他App中没有引用此App的文件
删除整个App文件夹
在settings.py的Installed Apps中移除该app
在urls.py中移除该App相关内容。
十、Django快速开发配置小结:
在app的models.py创建类(即数据库中的表)
在views.py下创建业务视图函数[导入orm模块]
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
from classModel import models
在django的templates目录下创建前端html文件
在在django的static目录下存放js,css.images 文件
在urls.py下建立映射关系
from classModel import views
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具