Django搭建博客全流程指南
1. 项目初始化
首先,我们要创建一个 Django 项目。在命令行中执行以下操作:
cd ~ / Documents / Projects
Django-admin.py startproject FirstBlog
cd FirstBlog
ls
执行
ls
命令后,会看到以下几个重要文件,它们的作用如下:
-
_init_.py
:告诉 Python 这个文件夹是一个 Python 包,允许 Python 将文件夹中的所有脚本作为模块导入。
-
manage.py
:它并非网站的一部分,而是一个从命令行运行的实用脚本,包含一系列管理网站的功能。
-
settings.py
:包含网站的设置。Django 不使用 XML 文件进行配置,所有配置都是用 Python 编写的。该文件包含定义网站设置的多个变量。
-
URLs.py
:负责将 URL 分配到各个页面。例如,可以将
yourwebsite.com/about
映射到 “关于我们” 页面。
2. 理解 Django 设计原则
在创建应用之前,我们需要了解 Django 的设计原则。
2.1 MVC/MTV 架构
Django 是一个 MVC(Model View Controller)框架,不过它将自己称为 MTV(Model Template View)框架。这两种架构虽然略有不同,但本质上非常相似。MVC 是一种架构模式,用于组织项目结构,将处理数据的代码和管理用户界面的代码分离。
2.2 DRY 原则
Django 遵循 DRY(Don’t Repeat Yourself)原则,即不要重复编写执行相同任务的代码。例如,在博客中,如果需要在多个页面实现随机选取文章的功能,只需编写一次该功能,然后在需要的页面调用即可。
应用允许我们以 DRY 风格编写网站。每个项目可以包含多个应用,每个应用也可以属于多个项目。这样,如果未来创建的新网站需要相同的功能,只需导入相应的应用,而无需重新编写代码。
3. 创建博客应用
python manage.py startapp blog
cd blog
ls
执行上述命令后,会看到
_init_.py
文件(用于将文件夹转换为包)以及
models
、
tests
和
views
三个文件。目前我们暂时不用考虑测试相关内容,
models
和
views
是比较重要的部分,它们对应 MVC 中的 M 和 V。
3.1 模型(Models)
模型用于定义数据库表的结构。对于博客,我们需要一个文章表,包含标题、正文、作者、写作时间等字段。以下是示例代码:
from Django.db import models
class posts (models.Model):
author = models.CharField (max_length = 30)
title = models.CharField (max_length = 100)
bodytext = models.TextField ()
timestamp = models.DateTimeField ()
3.2 视图(Views)
视图文件用于编写生成网页的代码。当用户输入 URL 时,请求会通过
urls.py
脚本传递到
views.py
脚本,
views.py
从模型中获取相关数据,进行处理后传递给模板,最终呈现给用户。以下是一个简单的视图示例:
from django.shortcuts import render_to_response
from Blog.models import posts
def home (request):
return render_to_response ('index.html')
4. 配置 MySQL 数据库
4.1 安装 MySQL
brew install MySQL
easy_install MySQL-python
mysqld_safe --skip-grant-tables # 让任何人拥有完全权限
mysql -u root
在 MySQL 命令行中执行以下操作:
UPDATE mysql.user SET Password = PASSWORD ('nettuts') WHERE User = 'root';
FLUSH PRIVILEGES;
退出 MySQL 命令行,然后使用新密码登录:
MySQL -u root -p
CREATE DATABASE firstblog;
quit
4.2 配置 Django 数据库设置
打开
settings.py
文件,修改数据库配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'firstblog',
'USER': 'root',
'PASSWORD': 'nettuts',
'HOST': '',
'PORT': '',
}
}
4.3 同步数据库
python2.6 manage.py syncdb
每次修改模型后,都需要运行该命令来更新数据库。需要注意的是,该命令只能添加新字段,不能修改现有字段。如果需要删除字段,需要使用
PhpMyAdmin
等工具手动操作。
5. 配置 URL 和模板
5.1 配置 URL
打开
urls.py
文件,添加以下代码:
URL (r '^ $', 'FirstBlog.blog.views.home', name = 'home')
5.2 创建模板
在
Blog
应用中创建一个名为
templates
的文件夹,并在其中创建
index.html
文件,内容可以暂时为 “Hello World”。
5.3 配置模板路径
打开
settings.py
文件,修改
TEMPLATE_DIRS
如下:
TEMPLATE_DIRS = (
"blog / templates",
)
5.4 添加动态内容
修改
index.html
文件,添加动态内容:
<div class = "container">
<h1> First Blog </h1>
<h2> {{title}} </h2>
<h3> Posted on {{date}} by {{author}} </h3>
<p> {{body}} </p>
</div>
修改
views.py
文件,传递数据到模板:
from django.shortcuts import render_to_response
from Blog.models import posts
def home (request):
content = {
'title': 'My First Post',
'author': 'Giles',
'date': '18th September 2011',
'body': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam cursus tempus dui, ut vulputate nisl eleifend eget. Aenean just felis, dapibus quis vulputate at, porta et pain. Praesent enim libero, malesuada nec vestibulum vitae, fermentum nec ligula. Etiam eget convallis turpis. Donec non sem fair. ',
}
return render_to_response ('index.html', content)
5.5 从数据库获取数据
修改
views.py
文件,从数据库获取数据:
from django.shortcuts import render_to_response
from Blog.models import posts
def home (request):
entries = posts.objects.all () [: 10]
return render_to_response ('index.html', {'posts': entries})
修改
index.html
文件,显示数据库数据:
<div class = "container">
<h1> First Blog </h1>
<hr />
{% for post in posts%}
<div class = "post">
<h2> {{post.title}} </h2>
<h3> Posted on {{post.timestamp}} by {{post.author}} </h3>
<p> {{post.bodytext}} </p>
</div>
<hr />
{% endfor%}
</div>
由于数据库中还没有数据,需要先停止服务器,然后运行
python2.6 manage.py syncdb
命令添加新表。接着在 MySQL 命令行中插入数据:
INSERT INTO blog_posts (author, title, bodytext) values ('Bob', 'Hello World', 'Lorem Ipsum');
重新启动服务器,刷新页面,就可以看到添加的博客文章了。
6. 启用 Django 管理系统
6.1 修改 URL 设置
打开
urls.py
文件,取消第 4、5、13 和 16 行的注释,以便访问管理页面。
6.2 修改应用设置
打开
settings.py
文件,取消
'django.contrib.admin'
和
'django.contrib.admindocs'
的注释。
6.3 创建
admin.py
文件
在
Blog
文件夹中创建
admin.py
文件,添加以下代码:
from Django.contrib import admin
from Blog.models import posts
admin.site.register (posts)
6.4 同步数据库并重启服务器
python2.6 manage.py syncdb
重启服务器后,访问
127.0.0.1:8000/admin
,使用之前
syncdb
时设置的账号密码登录,就可以使用管理系统创建、编辑和删除博客文章了。
7. 在 Web 服务器上安装 Django
7.1 检查服务器支持
大多数 Web 服务器使用 CGI 运行各种语言的脚本。Django 可以运行在 FastCGI 上,理论上也可以运行在 CGI 上,但官方不支持,而且对于实际生产环境来说速度太慢。需要检查服务器是否安装了相关支持,通常可以在 “CGI 和脚本语言支持” 部分找到。
7.2 安装 Django
如果使用 VPS 托管或专用服务器,通常已经预装了 Python,只需按照本地安装 Django 的步骤操作即可。如果没有 Python,可以使用包管理器进行安装。
ssh root@example.com
wget http://www.djangoproject.com/download/1.3.1/tarball/
tar xzvf Django-1.3.1.tar.gz
cd Django-1.3.1
python setup.py install
7.3 上传网站文件
使用文件传输客户端将之前创建的网站文件上传到服务器。可以将文件放在任何位置,但不要放在
public
文件夹中,以免他人查看源代码。
7.4 创建数据库并同步
在服务器上创建名为
firstblog
的 MySQL 数据库,然后运行
syncdb
命令。由于服务器设置与本地不同,可能需要修改
settings.py
文件中的数据库密码。
7.5 运行服务器
python manage.py runserver 0.0.0.0:8000
在浏览器中访问服务器的 8000 端口,就可以看到网站了。
8. Python 语言优势与前景
Python 近年来在自由软件、科学和教育软件等社区中越来越受欢迎。它具有简单的语法、动态类型、内存管理功能和大量可用的库,使得开发应用程序变得简单、快速且有趣。Python 的语法接近自然语言,程序看起来像伪代码,因此是初学者学习编程的理想选择。
虽然 Python 不适合底层编程或对性能要求极高的应用,但在许多领域都有成功的应用案例,如 Google、Yahoo、NASA 等。随着越来越多的人对 Python 编程感兴趣,Python 被认为是未来的编程语言之一,成为 Python 程序员不仅能获得更多的就业机会,还能从事自己感兴趣的编程工作。
总之,学习编程是一个持续的过程,Python 为我们提供了一个很好的起点。通过本文的介绍,你可以使用 Django 搭建一个简单的博客,并在服务器上部署。希望你能在编程的道路上不断探索,创造出更多有用的应用。
流程图
graph LR
A[项目初始化] --> B[理解设计原则]
B --> C[创建博客应用]
C --> D[配置数据库]
D --> E[配置URL和模板]
E --> F[启用管理系统]
F --> G[服务器部署]
总结表格
| 步骤 | 操作内容 |
|---|---|
| 项目初始化 | 创建项目,了解重要文件作用 |
| 理解设计原则 | 掌握 MVC/MTV 架构和 DRY 原则 |
| 创建博客应用 | 创建应用,定义模型和视图 |
| 配置数据库 | 安装 MySQL,配置 Django 数据库设置,同步数据库 |
| 配置 URL 和模板 | 配置 URL,创建模板,从数据库获取数据 |
| 启用管理系统 |
修改 URL 和应用设置,创建
admin.py
文件,同步数据库
|
| 服务器部署 | 检查服务器支持,安装 Django,上传文件,创建数据库,运行服务器 |
9. 深入理解 Django 组件交互
9.1 组件交互流程
Django 项目中的各个组件相互协作,形成一个完整的 Web 应用。以下是主要组件的交互流程:
1.
用户请求
:用户在浏览器中输入 URL,发起请求。
2.
URL 路由
:请求首先到达
urls.py
文件,该文件根据 URL 规则将请求路由到相应的视图函数。
3.
视图处理
:视图函数(
views.py
中的函数)接收请求,根据业务逻辑从模型(
models.py
)中获取数据。
4.
数据获取
:视图函数通过模型的方法查询数据库,获取所需的数据。
5.
模板渲染
:视图函数将获取的数据传递给模板(
index.html
等),模板使用 Django 的模板语言将数据填充到 HTML 页面中。
6.
响应返回
:渲染后的 HTML 页面作为响应返回给用户的浏览器。
9.2 示例代码分析
以下是一个简单的示例,展示了组件之间的交互:
# urls.py
from django.urls import path
from .views import home
urlpatterns = [
path('', home, name='home'),
]
# views.py
from django.shortcuts import render
from .models import Post
def home(request):
posts = Post.objects.all()[:10]
return render(request, 'index.html', {'posts': posts})
# models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('date published')
# index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Blog</title>
</head>
<body>
<h1>My Blog</h1>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
<p>Published on: {{ post.pub_date }}</p>
{% endfor %}
</body>
</html>
10. 优化 Django 应用性能
10.1 数据库优化
-
索引优化
:在数据库表的经常用于查询的字段上创建索引,可以加快查询速度。例如,在
Post模型的title字段上创建索引:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200, db_index=True)
content = models.TextField()
pub_date = models.DateTimeField('date published')
-
查询优化
:避免不必要的数据库查询,使用
select_related()和prefetch_related()方法减少查询次数。例如:
# 使用 select_related() 查询关联对象
posts = Post.objects.select_related('author').all()
# 使用 prefetch_related() 查询多对多关系
posts = Post.objects.prefetch_related('tags').all()
10.2 缓存优化
- 页面缓存 :对于不经常变化的页面,可以使用 Django 的缓存框架进行页面缓存。例如,在视图函数中使用缓存:
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 缓存 15 分钟
def home(request):
posts = Post.objects.all()[:10]
return render(request, 'index.html', {'posts': posts})
- 模板片段缓存 :对于页面中的部分片段,可以使用模板标签进行缓存:
{% load cache %}
{% cache 600 sidebar %}
<!-- 侧边栏内容 -->
{% endcache %}
10.3 静态文件优化
- 压缩合并 :将多个 CSS 和 JavaScript 文件合并为一个文件,并进行压缩,减少 HTTP 请求次数。
- CDN 使用 :使用内容分发网络(CDN)来提供静态文件,提高文件加载速度。
11. 扩展 Django 应用功能
11.1 添加用户认证
Django 提供了内置的用户认证系统,可以方便地实现用户注册、登录和权限管理。以下是一个简单的用户登录示例:
# urls.py
from django.urls import path
from django.contrib.auth.views import LoginView
urlpatterns = [
path('login/', LoginView.as_view(template_name='login.html'), name='login'),
]
# login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
</body>
</html>
11.2 集成第三方应用
可以使用 Django 的插件机制集成第三方应用,如 Django REST framework 用于构建 RESTful API,Django-allauth 用于实现社交登录等。以下是集成 Django REST framework 的示例:
pip install djangorestframework
# settings.py
INSTALLED_APPS = [
# ...
'rest_framework',
]
# urls.py
from django.urls import path
from rest_framework.routers import DefaultRouter
from .views import PostViewSet
router = DefaultRouter()
router.register(r'posts', PostViewSet)
urlpatterns = [
# ...
path('', include(router.urls)),
]
12. 持续学习与社区支持
12.1 学习资源
- 官方文档 :Django 和 Python 的官方文档是学习的重要资源,提供了详细的文档和教程。
- 在线教程 :如 Django Girls Tutorial、MDN Web Docs 等,提供了丰富的学习资料。
- 书籍 :《Python 编程从入门到实践》《Django 实战》等书籍可以帮助深入学习。
12.2 社区支持
- 论坛 :Django 官方论坛和 Stack Overflow 等论坛可以提问和交流经验。
- 开源项目 :参与开源项目可以学习他人的代码和经验,同时也可以为社区做出贡献。
12.3 持续学习的重要性
编程技术不断发展,持续学习是保持竞争力的关键。通过学习新的技术和框架,可以不断提升自己的编程能力,开发出更优秀的应用。
流程图
graph LR
A[用户请求] --> B[URL路由]
B --> C[视图处理]
C --> D[数据获取]
D --> E[模板渲染]
E --> F[响应返回]
总结表格
| 步骤 | 操作内容 |
|---|---|
| 深入理解交互 | 掌握组件交互流程,分析示例代码 |
| 优化性能 | 数据库优化、缓存优化、静态文件优化 |
| 扩展功能 | 添加用户认证,集成第三方应用 |
| 持续学习 | 利用学习资源,参与社区支持 |
学习 Django 和 Python 是一个不断探索和实践的过程。通过深入理解组件交互、优化性能、扩展功能,并持续学习,我们可以开发出更加健壮、高效的 Web 应用。希望本文能为你在 Django 开发的道路上提供帮助,祝你编程愉快!
超级会员免费看
5万+

被折叠的 条评论
为什么被折叠?



