Django开发笔记
Django基础入门步骤
步骤一:安装Django
确保已经安装了Python环境,然后在命令行中执行以下命令安装Django:
pip install django
步骤二:创建Django项目
在命令行中执行以下命令来创建一个新的Django项目:
django-admin startproject 项目名称
步骤三:创建Django应用
进入刚才创建的项目目录,执行以下命令来创建一个Django应用:
cd 项目名称
python manage.py startapp 应用名称
步骤四:连接数据库
在Django项目的settings.py文件中,配置数据库连接。
# 项目名称/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # 使用SQLite数据库
'NAME': BASE_DIR / 'db.sqlite3', # 数据库文件路径
}
}
上述示例中使用了SQLite数据库,您也可以根据需要选择其他数据库,如MySQL、PostgreSQL等。配置其他数据库时,需要安装相应的数据库引擎和设置连接信息。
步骤五:定义模型
在Django应用中的models.py文件中定义模型(数据库表结构)。
# 应用名称/models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
步骤六:迁移数据库
执行以下命令将模型同步到数据库:
python manage.py makemigrations
python manage.py migrate
步骤七:创建视图
在Django应用中的views.py文件中创建视图函数,用于处理用户请求并返回相应的数据或页面。
# 应用名称/views.py
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'article_list.html', {'articles': articles})
步骤八:配置URL
在Django应用中的urls.py文件中配置URL路由,将请求映射到相应的视图函数。
# 应用名称/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
]
步骤九:创建模板
在Django应用的templates文件夹中创建HTML模板,用于渲染视图函数返回的数据。
<!-- 应用名称/templates/article_list.html -->
<!DOCTYPE html>
<html>
<head>
<title>文章列表</title>
</head>
<body>
<h1>文章列表</h1>
<ul>
{% for article in articles %}
<li>{{ article.title }} - {{ article.pub_date }}</li>
{% endfor %}
</ul>
</body>
</html>
步骤十:运行开发服务器
执行以下命令来运行Django开发服务器:
python manage.py runserver
现在,您可以在浏览器中访问http://localhost:8000/应用名称/articles/
来查看文章列表页面。您的Django项目已经连接了数据库,并且可以显示模型中的数据。
Django实现增删改查的操作
假设我们有一个模型(Model)表示文章(Article),其中包含title(标题)、content(内容)和pub_date(发布日期)三个字段。
步骤一:创建Django项目和应用
按照前面的步骤创建一个Django项目和一个应用,假设项目名称为"myproject",应用名称为"myapp"。
步骤二:定义模型
在Django应用中的models.py文件中定义模型。
# myapp/models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
步骤三:迁移数据库
执行以下命令将模型同步到数据库:
python manage.py makemigrations
python manage.py migrate
步骤四:增加数据
可以在Django的shell中添加数据,或者在代码中使用模型的API添加数据。这里我们在Django的shell中演示添加数据的操作。
python manage.py shell
然后在shell中执行以下代码:
from myapp.models import Article
# 创建并保存一个新的文章
article = Article(title="第一篇文章", content="这是文章的内容。")
article.save()
步骤五:查询数据
可以使用模型的API来查询数据。
# 查询所有文章
all_articles = Article.objects.all()
# 条件查询
filtered_articles = Article.objects.filter(title__contains="第一篇")
# 获取单个对象
single_article = Article.objects.get(title="第一篇文章")
步骤六:更新数据
可以使用模型的API来更新数据。
# 获取要更新的文章对象
article_to_update = Article.objects.get(title="第一篇文章")
# 更新标题和内容
article_to_update.title = "更新后的标题"
article_to_update.content = "这是更新后的内容。"
article_to_update.save()
步骤七:删除数据
可以使用模型的API来删除数据。
# 获取要删除的文章对象
article_to_delete = Article.objects.get(title="第一篇文章")
# 删除对象
article_to_delete.delete()
Django增删改查代码层的示例
-
增删改查代码:应该写在Django应用的
views.py
文件中。views.py
文件用于定义视图函数,处理用户请求并返回相应的数据或页面。在这里,我们可以把增删改查操作包装成视图函数,以便在浏览器中通过用户请求来执行这些操作。 -
模型定义:模型的定义应该写在Django应用的
models.py
文件中。这个文件用于定义应用的数据模型,即数据库表结构。 -
URL配置:URL的配置应该写在Django应用的
urls.py
文件中。这个文件用于定义应用的URL路由,将请求映射到相应的视图函数。
具体地,按照上述描述,代码应该写在以下文件的对应位置:
-
增删改查代码:应该写在Django应用的
views.py
文件中,例如:
# myapp/views.py
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'article_list.html', {'articles': articles})
def create_article(request):
if request.method == 'POST':
title = request.POST['title']
content = request.POST['content']
article = Article(title=title, content=content)
article.save()
# 可以添加保存成功后的处理,如重定向到列表页面
return redirect('article_list')
else:
return render(request, 'create_article.html')
def update_article(request, article_id):
article = get_object_or_404(Article, id=article_id)
if request.method == 'POST':
title = request.POST['title']
content = request.POST['content']
article.title = title
article.content = content
article.save()
# 可以添加保存成功后的处理,如重定向到详情页面
return redirect('article_detail', article_id=article_id)
else:
return render(request, 'update_article.html', {'article': article})
def delete_article(request, article_id):
article = get_object_or_404(Article, id=article_id)
if request.method == 'POST':
article.delete()
# 可以添加删除成功后的处理,如重定向到列表页面
return redirect('article_list')
else:
return render(request, 'delete_article.html', {'article': article})
-
模型定义:模型的定义应该写在Django应用的
models.py
文件中,例如:
# myapp/models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
-
URL配置:URL的配置应该写在Django应用的
urls.py
文件中,例如:
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
path('articles/create/', views.create_article, name='create_article'),
path('articles/<int:article_id>/update/', views.update_article, name='update_article'),
path('articles/<int:article_id>/delete/', views.delete_article, name='delete_article'),
]
更多Django的技术栈
1. **用户认证和权限控制**: 实现用户注册、登录、注销功能,并使用Django内置的认证系统来管理用户权限。同时,可以探索Django的装饰器和权限管理机制,确保只有授权用户才能访问特定的页面或执行特定操作。
2. **RESTful API**: 使用Django REST framework构建RESTful API,允许前端和移动端应用通过API访问数据。了解视图集、序列化器、认证和权限设置等相关概念,确保API的安全性和性能。
3. **异步任务处理**: 使用Django的Celery和RabbitMQ等工具,实现异步任务处理,如发送电子邮件、处理大量数据等。这有助于提高网站的响应速度和可扩展性。
4. **文件上传和存储**: 学习如何使用Django的文件上传功能,并结合云存储服务如Amazon S3或Google Cloud Storage,将文件存储在可靠和可扩展的存储中。
5. **国际化和本地化**: 探索如何在Django项目中实现国际化和本地化,让网站支持多语言和不同地区的时间、日期等格式。
6. **性能优化**: 学习Django中的性能优化技巧,包括数据库查询优化、缓存机制、视图缓存等,以提高网站的响应速度和吞吐量。
7. **单元测试和集成测试**: 编写单元测试和集成测试,保证代码的质量和稳定性。了解Django的测试框架和工具,如unittest和Selenium。
8. **WebSocket和实时通信**: 使用Django Channels实现WebSocket连接,构建实时通信功能,如聊天室或实时数据展示。
9. **社交登录集成**: 将社交登录(如Facebook、Google、GitHub等)集成到您的Django应用中,让用户可以使用他们的社交媒体账号进行登录。
10. **数据可视化**: 使用Django结合图表库(如Matplotlib、Plotly等)和前端框架(如Django Chart.js)实现数据可视化功能,以图表形式展示数据。