从零开始:Django 项目的创建与配置指南
![](https://static001.geekbang.org/infoq/26/26c1705ddbd85fbddf1bd9e48686f05f.png)
Django 简介:
Django 是一个开源的高级 Python Web 框架,由法国人 Guido Zempe 于 2003 年创建。它以“快速开发、可维护的网站”为目标,提供了许多内置的功能,如 ORM(对象关系映射)、URL 路由、模板系统、管理后台等,让开发者能够专注于业务逻辑,而无需从头开始构建网站的底层结构。
Django 的特点包括:
面向开发者的易用性:提供了强大的模板系统和管理后台。
高效的开发:内置 ORM 和模型管理系统简化数据库操作。
安全性:内置安全特性,如 CSRF 保护和 XSS 过滤。
可扩展性:模块化设计,方便添加新功能。
环境准备与安装:
Python 安装: 首先确保你的计算机上安装了 Python。你可以访问 Python 官网(https://www.python.org/downloads/)下载并安装最新版本。推荐使用Python 3.x。
虚拟环境: 为了保持项目环境的独立性,推荐使用虚拟环境(venv 或 conda)。在命令行中,进入你的项目目录,然后运行以下命令创建虚拟环境:
其中myenv
是你的虚拟环境名称。
激活虚拟环境: 在 Windows 上,运行
myenv\Scripts\activate
。 在 Unix 或 Mac 上,运行source myenv/bin/activate
。
安装 Django: 在激活的虚拟环境中,使用 pip 安装 Django:
安装完成后,确认 Django 版本:
设置项目: 创建一个新的 Django 项目,使用命令:
这将创建一个名为myproject
的文件夹,其中包含 Django 项目的基本结构。
现在,你已经准备好开始使用 Django 了。接下来可以深入学习项目的配置和应用的创建。
创建一个 Django 项目
创建一个 Django 项目非常简单,只需要几个命令。以下是在命令行中创建 Django 项目的步骤:
确保已激活虚拟环境(如果使用了虚拟环境): 确保你已经通过相应命令(如 Windows 的
myenv\Scripts\activate
或 Unix/Mac 的source myenv/bin/activate
)激活了虚拟环境。
打开终端或命令提示符: 在包含项目的文件夹中打开终端或命令提示符。
创建新项目: 运行以下命令创建一个新的 Django 项目,假设我们将其命名为
myproject
:
这将创建一个名为myproject
的文件夹,其中包含 Django 项目的基本结构,如myproject
、myproject/settings.py
、myproject/urls.py
、myproject/wsgi.py
等。
进入项目目录: 项目创建后,使用
cd
命令进入项目目录:
启动开发服务器: 使用以下命令启动 Django 的开发服务器,它将在本地运行:
现在,你应该能在浏览器中访问http://127.0.0.1:8000/
,看到 Django 的默认欢迎页面。
至此,你已经成功创建了一个基本的 Django 项目。接下来可以开始创建应用(app)并进行进一步的开发了。
Django 项目结构解析
在 Django 中,一个项目(project)是由一个或多个应用(app)组成的。一个项目包含了整个网站的配置、URL 路由、设置以及其他全局功能,而应用则是网站的特定功能模块。让我们来解析一下 Django 项目的基本结构:
项目文件夹: 项目文件夹是通过
django-admin startproject projectname
命令创建的,其中projectname
是项目的名称。在项目文件夹中,你会发现以下文件和文件夹:
manage.py
:这是一个命令行工具,可以帮助你与 Django 项目进行交互,比如运行开发服务器、创建数据库迁移等。projectname/
:这是项目的包含目录,其中包含了项目的设置和配置文件。projectname/__init__.py
:一个空文件,用于标识projectname
目录为 Python 包。projectname/settings.py
:包含了 Django 项目的设置,比如数据库配置、静态文件路径、模板路径等。projectname/urls.py
:定义了项目的顶级 URL 路由。projectname/wsgi.py
:用于将 Django 项目部署到 WSGI 兼容的 Web 服务器上的入口文件。
应用文件夹: 在 Django 项目中,应用是可重用的 Web 应用程序,可以包含特定功能的模型、视图、模板等。每个应用都有自己的文件夹,通常包含以下文件和文件夹:
appname/
:应用的包含目录,其中包含了应用的代码和资源文件。appname/__init__.py
:标识appname
目录为 Python 包。appname/admin.py
:用于注册模型到 Django 的后台管理界面。appname/apps.py
:包含应用的配置信息。appname/models.py
:定义应用的数据模型。appname/views.py
:包含应用的视图函数或类。appname/templates/
:存放应用的 HTML 模板文件。appname/static/
:存放应用的静态文件,如 CSS、JavaScript 和图像文件。
数据库迁移文件夹: Django 使用迁移(migration)来管理数据库模式的变更,迁移文件夹通常位于应用的目录下,包含了数据库模式变更的 Python 脚本文件。
虚拟环境和依赖文件: 在实际开发中,通常会使用虚拟环境来隔离项目的依赖。虚拟环境通常位于项目文件夹外部,而依赖文件(如
requirements.txt
)则包含了项目所需的 Python 包列表。
这就是一个典型的 Django 项目的基本结构。通过合理的组织和管理,可以使项目更易于维护和扩展。
配置 Django 项目
配置 Django 项目涉及以下几个关键步骤:
设置项目: 打开
project_name/settings.py
文件,配置项目的基本信息,如数据库设置、静态文件路径、中间件、URL 模式等。例如,设置数据库:
创建应用: 在
project_name
目录下,创建新的应用:
其中app_name
是你的应用名称。
配置应用: 在应用的
app_name/settings.py
中,添加应用到INSTALLED_APPS
列表中。
配置应用: Django 会为你创建一个新的应用目录,里面包含了一些默认的文件。你可以在这个目录下编写视图、模型、模板等文件来实现应用的功能。
注册应用: 在项目的
settings.py
文件中,找到INSTALLED_APPS
设置,将你新创建的应用添加到这个列表中:
编写视图: 在你的应用目录下的
views.py
文件中编写视图函数,处理用户请求并返回相应的响应。
配置 URL 路由: 在你的应用目录下创建一个
urls.py
文件,用于配置应用的 URL 路由。然后在项目的主urls.py
文件中,包含你的应用 URL 配置:
创建模型(可选): 如果你的应用需要与数据库交互,可以在应用目录下的
models.py
文件中定义模型类,代表数据库中的表结构。
运行开发服务器: 使用
python manage.py runserver
启动开发服务器,然后在浏览器中访问http://localhost:8000
(默认端口)查看项目是否启动。
管理后台: 访问
http://localhost:8000/admin/
,使用默认的管理员账户登录(用户名:admin
,密码:password
),可以创建和管理模型。
配置其他选项(如静态文件、邮件设置等): 根据项目需求,在
settings.py
中添加其他配置,如静态文件的托管、邮件服务器设置等。
以上就是配置 Django 项目的基本步骤,根据你的实际需求,可能还需要进行更多的定制。
数据库配置与迁移
在 Django 中,配置数据库并进行迁移的步骤如下:
选择数据库引擎: Django 支持多种数据库引擎,例如 SQLite、MySQL、PostgreSQL 等。在
settings.py
文件中的DATABASES
设置中选择适合你的数据库引擎,并填写相应的连接信息。
创建数据库: 根据你选择的数据库引擎,在数据库服务器上创建一个空数据库。如果使用 SQLite,可以跳过此步骤,因为 SQLite 数据库是以文件形式存储的。
配置数据库连接信息: 在
settings.py
文件中的DATABASES
设置中,根据你的数据库引擎填写连接信息。例如,对于 MySQL 数据库:
进行数据库迁移: 在项目根目录下,运行以下命令来创建数据库表和结构:
创建应用的数据库迁移文件(可选): 如果你在应用中创建了新的模型或对现有模型进行了更改,需要为这些更改创建数据库迁移文件。在应用目录下运行以下命令:
其中app_name
是你的应用名称。
应用数据库迁移: 运行以下命令来应用数据库迁移:
查看数据库迁移状态(可选): 运行以下命令可以查看数据库迁移的状态:
通过以上步骤,你就可以配置数据库并进行迁移了。请确保数据库连接信息正确,并且在进行迁移之前备份数据库以防止数据丢失。
模板与静态文件:
模板(Templates):
模板是 Django 中用于生成 HTML 内容的文件,通常存放在应用的
templates
目录下。
Django 使用模板语言(Template Language)来动态生成内容,包括变量、标签和过滤器。
在视图函数中使用
render()
函数加载模板并传递数据进行渲染,最终返回给用户的是渲染后的 HTML 页面。
模板语言中的变量使用
{{ variable_name }}
,标签使用{% tag_name %}
,过滤器使用{{ value|filter_name }}
的方式进行操作。
继承是模板中常用的技术,通过
{% extends 'base.html' %}
和{% block content %}
来实现模板的继承和覆盖。
静态文件(Static Files):
静态文件包括 CSS、JavaScript、图片等不需要经过处理的文件,通常存放在应用的
static
目录下。
在模板中使用
{% load static %}
加载静态文件,然后通过{% static 'path/to/file' %}
来引用静态文件。
在
settings.py
中配置STATIC_URL
用于指定静态文件的 URL 前缀,STATICFILES_DIRS
用于指定静态文件的存放路径。
在开发环境中,可以使用
django.contrib.staticfiles
应用来自动收集静态文件,而在生产环境中,可以使用 Web 服务器(如 Nginx)来提供静态文件服务。
为了提高性能,可以使用 CDN(内容分发网络)来加速静态文件的访问。
用户认证与权限控制:
用户认证(User Authentication):
Django 提供了内置的用户认证系统,包括用户注册、登录、注销、密码重置等功能。
可以通过
django.contrib.auth
应用来实现用户认证,其中包括User
模型和authenticate()
、login()
、logout()
等方法。
用户可以通过表单输入用户名和密码进行登录,系统会验证用户身份并创建相应的会话。
可以使用装饰器
@login_required
来限制某些视图只能被登录用户访问,未登录用户将被重定向到登录页面。
权限控制(Permission Control):
Django 提供了基于角色的权限控制系统,可以对用户进行授权以限制其访问权限。
可以通过
django.contrib.auth.models.Permission
和django.contrib.auth.models.Group
来管理权限和用户组。
可以在视图函数中使用
@permission_required
装饰器来限制只有具有特定权限的用户才能访问该视图。
可以在模板中使用
{% if user.has_perm %}
来根据用户是否具有某项权限来展示不同的内容。
可以通过自定义权限来扩展系统的权限控制,例如定义特定操作的权限,并将其分配给用户或用户组。
Django 管理后台(Django Admin):
Django 管理后台是一个内置的功能,用于管理数据库模型(models)和应用程序的数据。它提供了一个用户友好的界面,管理员可以执行以下操作:
模型管理:在后台,可以查看、添加、编辑和删除模型(如 User、Post 等)的实例。每个模型都有自己的表单,可以直观地管理数据。
数据查看:可以查看模型数据的列表,支持排序、过滤和搜索功能。
数据编辑:点击模型实例可以进入详细编辑页面,可以修改字段值并保存更改。
模型创建:可以创建新的模型实例,并设置初始属性。
模型字段管理:可以管理模型的字段,如字段类型、默认值、验证规则等。
模型关系管理:对于模型之间的关系,如一对一、一对多和多对多关系,后台提供了可视化工具来管理关联实例。
模型表单定制:可以自定义模型的表单,包括添加或移除字段、改变字段顺序等。
权限管理:Django 管理后台的访问权限可以通过
django.contrib.auth
模块进行控制,可以设置不同用户或用户组对不同模型的访问权限。
数据导出/导入:支持 CSV 格式的数据导出和导入,方便数据备份或迁移。
后台日志:记录后台操作日志,便于审计和问题排查。
Django 管理后台是一个非常实用的功能,使得开发人员和管理员可以轻松管理数据,而无需编写大量的数据库操作代码。通过它,可以快速地对应用中的数据进行操作,提高开发和维护效率。
项目优化:
性能优化:
代码优化:减少不必要的数据库查询,使用缓存,优化数据库索引。
静态文件合并和压缩:合并 CSS 和 JavaScript 文件,压缩它们以减少 HTTP 请求和传输大小。
CDN(内容分发网络) :对于静态资源,使用 CDN 可以提高访问速度。
代码库优化:使用性能分析工具(如 cProfile、Python 的
timeit
)找出瓶颈并进行优化。
代码重构:遵循 DRY(Don't Repeat Yourself)原则,避免冗余代码,提高代码可读性和维护性。
资源管理:限制不必要的资源消耗,如内存和 CPU。
响应式设计:确保网站在不同设备和屏幕尺寸上都能有良好的用户体验。
安全措施:
身份验证和授权:
使用强密码策略,考虑使用多因素认证(MFA)。
对敏感操作进行权限控制,如用户管理、数据修改等。
数据保护:
对敏感数据进行加密,比如密码、信用卡信息等。
使用 HTTPS 以保护通信内容不被窃听。
输入验证和过滤:
对用户输入进行校验,防止 SQL 注入、XSS 攻击等。
使用安全的库和框架来处理用户输入。
错误处理和日志:
清晰的错误消息不应该包含敏感信息。
记录和监控日志,以便及时发现并处理安全问题。
框架和库的安全更新:
定期检查并更新所有依赖的库和框架,修复已知的安全漏洞。
防火墙和安全软件:
在服务器上安装防火墙,阻止不必要的网络连接。
安装和配置安全软件,如 WAF(Web 应用防火墙)。
代码审查和渗透测试:
定期进行代码审查,寻找潜在的安全问题。
进行安全渗透测试,模拟黑客攻击,找出并修复漏洞。
合规性:
遵守相关法规,如 GDPR(欧洲通用数据保护条例)。
以上措施可以帮助你提升项目的性能和安全性,但请注意,安全是一个持续的过程,需要不断更新和改进。
部署 Django 项目
部署 Django 项目通常涉及以下几个步骤,这些步骤可能会根据你的具体需求和环境有所不同:
设置服务器:
选择服务器:你可以选择使用云服务(如 AWS、Google Cloud、Heroku 等)、虚拟主机(如 DigitalOcean、Vultr、Linode 等)、或者自己的服务器(如 Ubuntu、CentOS 等)。
安装操作系统和必要的软件:如 Python、Nginx、Gunicorn 或 uWSGI 等 Web 服务器软件。
安装 Django:
在服务器上安装最新版本的 Python 和 Django,使用命令行:
设置项目和应用:
创建一个新的 Django 项目:
进入项目目录并创建应用:
配置数据库:
在
project_name/settings.py
文件中,配置数据库连接信息(如 PostgreSQL、MySQL、SQLite 等)。
迁移数据库:
创建超级用户:
静态文件和媒体文件管理:
配置静态文件和媒体文件的存储路径,通常放在
static
和media
目录下。在生产环境中,可能需要使用如 Gunicorn、uWSGI、Nginx 等服务器配置反向代理和静态文件处理。
部署代码:
将项目文件(包括
manage.py
)上传到服务器。使用版本控制系统(如 Git)进行版本控制,确保代码更新的可追溯性。
安装必要的依赖(如数据库驱动、Django 应用等)。
启动服务器:
使用 Gunicorn、uWSGI 或 Nginx 等工具启动 Django 应用。具体命令取决于你的配置:
Gunicorn:
gunicorn project_name.wsgi:application
uWSGI:
uwsgi --http :8000 --module project_name.wsgi:application
Nginx: 配置 Nginx 虚拟主机,并指向项目的 wsgi 文件。
测试应用:
通过浏览器访问
http://your_server_ip:your_port/
,确保应用正常运行。
安全性和日志:
安装 SSL 证书以启用 HTTPS。
配置日志记录,以便监控和调试。
以上是一个基本的部署流程,实际部署可能需要根据你的具体需求进行调整,例如使用负载均衡、容器化(Docker)、环境变量管理等。
文章转载自:Amd794
评论