Django 是一个高级的Python Web框架,鼓励快速开发和简洁、实用的设计。它的目标是让开发人员能够更加专注于程序的业务逻辑,而无需关注过多的细节。以下是介绍如何用Django进行基本的Web开发的一些步骤和示例。
安装Django
在开始之前,确保你已经安装了Python和pip(Python包管理工具)。然后,使用pip安装Django:
Copy
pip install django
创建Django项目
创建一个Django项目:一个Django项目包含了你整个网站的配置。你可以通过django-admin命令来创建一个新的项目:
Copy
django-admin startproject myproject
cd myproject
创建一个Django应用:在Django中,一个项目可以包含多个应用(app),每个应用都是一个独立的模块,负责处理项目的一个特定功能。使用以下命令创建一个新的应用:
Copy
python manage.py startapp myapp
添加应用到项目配置:在myproject/settings.py中,将你的应用添加到INSTALLED_APPS列表中:
Copy
INSTALLED_APPS = [
...
'myapp',
]
定义模型(Model)
模型负责定义数据库的结构。在myapp/models.py中定义你的模型:
Copy
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
生成和应用数据库迁移(Database Migration)
生成迁移文件:Django会追踪你对模型的更改,并生成相应的数据库迁移文件:
Copy
python manage.py makemigrations
应用迁移:将这些迁移应用到你的数据库,创建相应的表结构:
Copy
python manage.py migrate
创建视图(View)
视图决定了如何展示数据。在myapp/views.py中定义你的视图:
Copy
from django.shortcuts import render
from .models import Article
def index(request):
articles = Article.objects.all()
return render(request, 'index.html', {'articles': articles})
创建URL配置
在myapp目录下创建一个名为urls.py的文件,并定义URL模式:
Copy
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
确保在myproject/urls.py中包含你的应用的URL配置:
Copy
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
创建模板(Template)
在myapp目录下创建一个templates目录,并在其中创建一个index.html文件:
Copy
My Articles
Articles
- {% for article in articles %}
- {{ article.title }} - {{ article.published_date }}
- {% endfor %}
运行开发服务器 现在,你可以运行Django的开发服务器来查看你的工作成果:
Copy
python manage.py runserver
打开你的浏览器,访问http://127.0.0.1:8000/,你应该可以看到一个文章列表的页面。
管理后台
Django提供了一个强大的管理后台。首先,创建一个超级用户,以便你能够登录管理界面:
Copy
python manage.py createsuperuser
然后,更新myapp/admin.py文件,注册你的模型:
Copy
from django.contrib import admin
from .models import Article
admin.site.register(Article)
现在,你可以访问http://127.0.0.1:8000/admin/并使用超级用户的凭据登录,管理你的文章。
通过这些步骤,你已经创建了一个简单的Django应用,能够显示数据库中的数据,并提供了一个基本的管理界面。Django还有许多其他功能和特性,例如表单处理、用户认证、中间件等,你可以根据需要进一步学习和探索。
在Django项目中,添加测试功能是一项重要的任务,它能确保你的代码在开发和修改过程中保持其正确性和稳定性。Django内置了对测试的支持,使用的测试框架是Python的unittest。以下是在Django中添加和运行测试的一些步骤和示例:
-
设置测试环境
Django项目默认支持测试功能,并且推荐你把测试代码放在每个应用的tests.py文件中。但为了更好地组织测试代码,也可以把测试分成多个文件和目录。
-
编写测试用例
在你的应用目录中,找到并编辑tests.py文件。我们将为之前建立的Article模型编写测试用例。
例如,在myapp/tests.py中:
Copy
from django.test import TestCase
from .models import Article
class ArticleModelTests(TestCase):
def test_article_creation(self):
# 创建一个新的文章对象
article = Article.objects.create(title="Test Article", content="Test content")
# 检查对象是否正确创建
self.assertEqual(article.title, "Test Article")
self.assertEqual(article.content, "Test content")
self.assertIsNotNone(article.published_date)
- 添加更多测试
你可以添加更多测试来覆盖你的视图、表单、模板等。
例如,测试视图的示例:
Copy
from django.urls import reverse
class ArticleViewTests(TestCase):
def test_index_view(self):
# 创建一些测试数据
Article.objects.create(title="Test Article 1", content="Test content 1")
Article.objects.create(title="Test Article 2", content="Test content 2")
# 通过客户端请求视图
response = self.client.get(reverse('index'))
# 检查响应
self.assertEqual(response.status_code, 200) # 检查状态码
self.assertContains(response, "Test Article 1") # 检查内容
self.assertContains(response, "Test Article 2")
self.assertTemplateUsed(response, 'index.html') # 检查使用的模板
- 运行测试
使用manage.py运行测试。Django提供了一个简单的命令来运行所有的测试:
Copy
python manage.py test
该命令会自动发现并运行tests.py中的所有测试用例,并输出结果。
- 使用工厂库(可选)
为了简化测试数据的创建,你可以使用 factory_boy 等第三方库。它能方便地生成测试数据,并且能让你的测试保持简洁、易读。
首先,安装factory_boy:
Copy
pip install factory_boy
然后,可以在tests.py中使用工厂来创建测试数据:
cpp
# myapp/tests.py
from django.test import TestCase
from .models import Article
class ArticleModelTests(TestCase):
def test_article_creation(self):
# 创建一个新的文章对象
article = Article.objects.create(title="Test Article", content="Test content")
# 检查对象是否正确创建
self.assertEqual(article.title, "Test Article")
self.assertEqual(article.content, "Test content")
self.assertIsNotNone(article.published_date)
- 其他测试功能
测试表单:通过将表单数据传递到视图中并验证验证结果,以确保表单逻辑正确。
测试中间件和信号:确保你的中间件和信号在预期情况下正确工作,可以模拟请求或者触发信号进行测试。
持续集成:结合持续集成(CI)工具,如GitHub Actions、Travis CI或Jenkins,可以在每次代码提交或合并时自动运行测试,确保项目始终保持高质量。
通过以上步骤和示例,你可以在Django项目中添加和运行测试功能,确保你的代码在开发和修改过程中保持其正确性和稳定性。