
★hello,大家好,我是程序员黎明 ,本期我们将学习如何创建一个Django项目,首先我们会从安装环境开始,再到怎么搭建,然后去实现一个简单的博客系统。在学完基础知识后我会带大家做一个稍微复杂一点的Django项目,希望大家耐心学习哦!
第一章:Django是啥?
什么是Django?
简单来说,Django是一个用Python编写的Web框架,能帮助你快速搭建一个功能强大的网站。框架的意思就是它帮你做好了一些基础结构和功能,比如处理网页请求、连接数据库、用户登录和权限管理等等。你只需要在这个框架的基础上添加自己的业务逻辑,而不用从零开始写很多底层代码。
举个例子,搭网站就像盖房子,Django就像是给你提供了一套现成的模板和工具。你不需要从头设计每个砖头、每根钢筋,而是直接根据你的需求调整现有的结构,快很多。
Django的特点
-
快速开发:它提供了很多现成的组件,比如用户管理、数据库操作,你不需要重复造轮子。 -
可扩展性强:你可以根据需求加功能,做小项目、大项目都没问题。 -
社区活跃:Django有庞大的开发者社区,遇到问题时容易找到答案。
第二章:如何安装Django?
安装Django很简单,但我们要保证环境配置好。下面跟着我的步骤来吧。
1. 安装Python
为什么要安装Python?
Django是用Python写的,所以我们首先需要安装Python。
如何安装Python?
-
打开 Python官网,点击“Download Python 3.x.x”(一般会推荐最新版本)。下载完成后,运行安装包。 -
安装时记得勾选“Add Python to PATH”,这样安装完之后可以直接在命令行中使用Python命令。
2. 安装Django
安装好Python后,接下来我们要用Python的包管理工具pip来安装Django。
打开命令行
-
Windows用户:点击“开始”菜单,输入 cmd并打开命令提示符。 -
Mac和Linux用户:打开“终端”应用。
安装Django
在命令行中输入以下命令安装Django:
pip install django
pip是Python的包管理工具,类似于应用商店,Django就是其中的一个“应用”。这个命令会自动下载并安装最新版本的Django。
3. 验证安装
为了确认Django是否安装成功,我们可以查看版本号。在命令行中输入:
django-admin --version
如果看到类似4.x.x(版本号可能不同),说明Django安装成功了。
第三章:第一个简单的Django项目
接下来我们正式开始创建一个Django项目。Django项目是一个包含各种功能的网站工程,下面我们一步步创建。
1. 创建项目
在命令行中,进入你想要存放项目的文件夹,输入以下命令:
django-admin startproject mysite
这里mysite是项目名,可以根据你的实际情况换成你想要的名字,比如myblog、myshop等。
运行完命令后,Django会生成一个包含基本结构的项目目录。
2. 项目结构解读
Django生成的项目目录结构如下:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
-
manage.py:这是Django项目的管理工具,用它来执行各种命令,比如运行服务器、创建数据库表等。 -
mysite/(里面的文件夹名与你的项目名一致):这个目录包含项目的配置文件。 -
settings.py:项目的配置文件,所有与项目相关的设置都在这里,包括数据库配置、时区、静态文件等。 -
urls.py:定义URL路由的地方,决定用户访问某个地址时应该显示什么内容。 -
wsgi.py:与部署有关的文件(一般上线时用)。
3. 启动开发服务器
Django自带一个开发用的轻量服务器,帮助你本地测试项目。进入项目的根目录(有manage.py的地方),然后输入:
python manage.py runserver
这时命令行会提示你服务器已经启动并监听在http://127.0.0.1:8000/,然后我们打开浏览器访问这个地址,你会看到Django的默认欢迎页面,说明服务器运行成功了。
4. 自定义端口(可选)
如果你想要改变默认的端口(8000),可以指定一个新的端口号:
python manage.py runserver 8080
现在可以通过 http://127.0.0.1:8080/ 访问你的项目。
第四章:理解Django项目结构
我们来更详细地看一下Django项目的目录和每个文件的作用。
1. manage.py
manage.py是Django项目的核心管理工具。你可以用它来执行各种Django命令,比如运行服务器、进行数据库迁移、创建超级用户等。它的用法就是python manage.py 命令。
2. settings.py
这个文件包含项目的所有配置选项。你需要在这里进行一些关键设置,比如:
-
DEBUG模式: DEBUG = True表示调试模式,开发时开启,上线时记得关闭。 -
数据库设置:默认使用SQLite数据库,适合小项目。以后你可以在这里改用其他数据库,如MySQL、PostgreSQL等。 -
静态文件设置:你可以在这里配置项目的CSS、JavaScript、图片等文件的路径。
3. urls.py
Django使用URL路由系统来匹配用户请求和处理函数。urls.py定义了请求地址和相应视图的映射,比如用户访问 /blog/ 时应该显示博客首页。
4. wsgi.py和asgi.py
这两个文件和服务器部署有关,通常在本地开发时不需要动它们。wsgi.py用于传统同步服务,asgi.py用于支持异步的Web服务。
第五章:创建Django应用
我们知道Django项目通常由多个应用组成,每个应用代表一个独立的功能模块。比如一个博客项目可以有“文章管理”、“用户管理”等应用,每个应用都是一个模块。
1. 创建应用
所以在项目的根目录下,输入以下命令创建一个新的应用(比如博客应用):
python manage.py startapp blog
这样会生成一个名为blog的文件夹,里面包含以下内容:
blog/
__init__.py
admin.py
apps.py
models.py
views.py
tests.py
migrations/
-
views.py:这里定义页面逻辑,当用户访问某个URL时,Django会调用相应的视图函数返回结果。 -
models.py:这里定义数据库模型,用来和数据库交互。 -
admin.py:配置后台管理页面的文件。 -
migrations/:这个文件夹存放数据库变更记录。
2. 注册应用
创建好应用后,还需要在项目中“注册”它,才能使用。在mysite/settings.py里找到INSTALLED_APPS,在列表里加入新应用的名字:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # 这里加上我们的blog应用
]
这样Django就知道我们新建了一个blog应用,并会把它当作项目的一部分进行处理。
第六章:写一个简单的页面
接着我们来写一个简单的页面,展示“欢迎来到我的博客首页!”
1. 定义视图(View)
视图函数是处理用户请求的地方。在blog/views.py里,写一个简单的函数,用来返回一段HTML文字:
from django.http import HttpResponse
def index(request):
return HttpResponse("欢迎来到我的博客首页!")
这里的HttpResponse用来直接返回一段HTML内容。你可以把它看作是网页的内容。
2. 配置URL
要让用户访问某个地址时看到这个页面,我们需要在blog/urls.py里配置URL映射。在blog/文件夹下新建一个urls.py文件,内容如下:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index), # 根路径对应index视图
]
然后,我们还需要把这个blog应用的URL映射添加到项目的主URL配置中。在mysite/urls.py里
,添加一行:
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # 把blog的URL包含进来
]
这样,访问 http://127.0.0.1:8000/blog/ 时,就会调用blog/views.py里的index函数,并显示“欢迎来到我的博客首页!”。
这样,我们的项目就搭建完成啦,但是这个会比较简单一点,接下来我们将做一个稍微复杂一些的Django项目:多用户博客系统。这个项目包括用户注册、登录、发布文章、评论系统等功能。在这个过程中,我们会用到Django的多个高级特性,如模型、表单、用户认证系统、关系数据库操作等。
复杂一点的Django项目
项目功能概述:
-
用户系统:支持用户注册、登录、注销功能。 -
博客系统:用户可以发布、编辑、删除博客文章。 -
评论系统:允许用户在博客文章下发表评论。 -
管理员后台:管理员可以通过Django自带的后台管理所有内容。 -
文章分类:支持按分类查看文章。
开始之前
在开始前要确保你已经安装了Django,并创建了一个Django项目。假设项目名为blog_project,应用名为blog。
第一步:创建Django项目和应用
-
创建项目:
django-admin startproject blog_project -
创建应用:进入
blog_project目录,然后创建一个名为blog的应用:python manage.py startapp blog -
注册应用:打开
blog_project/settings.py,在INSTALLED_APPS中添加blog应用:INSTALLED_APPS = [
# ... 其他默认应用
'blog',
]
第二步:设计数据库模型
我们需要定义三个模型:
-
Article:表示博客文章。 -
Category:表示文章分类。 -
Comment:表示文章下的评论。
-
**定义文章模型 (
Article)**:打开blog/models.py,定义如下的模型:from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Category(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
def __str__(self):
return f"Comment by {self.user} on {self.article}" -
运行迁移:Django使用迁移系统来同步数据库。我们首先需要创建数据库迁移文件,然后应用这些迁移:
python manage.py makemigrations
python manage.py migrate
第三步:创建用户系统
Django自带了非常方便的用户系统。我们只需要稍微配置一下,就可以实现用户注册、登录、注销等功能。
-
用户注册视图:在
blog/views.py中,添加用户注册功能:from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('blog:article_list')
else:
form = UserCreationForm()
return render(request, 'blog/register.html', {'form': form}) -
用户登录视图:Django提供了现成的登录视图,我们可以直接使用。
-
用户注销视图:同样,Django也有现成的注销功能。
-
创建URL路由:在
blog/urls.py中,添加注册、登录、注销的URL路由:from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
path('register/', views.register, name='register'),
path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
] -
用户注册模板:在
blog/templates/blog/目录下创建register.html:<h2>注册</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">注册</button>
</form> -
用户登录模板:创建
login.html:<h2>登录</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">登录</button>
</form>
第四步:实现博客功能
我们接下来实现博客文章的发布、编辑和显示功能。
-
文章列表视图:在
views.py中添加显示文章列表的视图:from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'blog/article_list.html', {'articles': articles}) -
文章详情视图:用于显示单篇文章的内容:
from django.shortcuts import get_object_or_404
def article_detail(request, pk):
article = get_object_or_404(Article, pk=pk)
return render(request, 'blog/article_detail.html', {'article': article}) -
URL路由:在
urls.py中添加文章列表和详情页的路由:urlpatterns += [
path('articles/', views.article_list, name='article_list'),
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
] -
文章模板:
-
文章列表模板 article_list.html:<h2>文章列表</h2>
<ul>
{% for article in articles %}
<li>
<a href="{% url 'blog:article_detail' article.pk %}">{{ article.title }}</a>
by {{ article.author }}
</li>
{% endfor %}
</ul> -
文章详情模板 article_detail.html:<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
<p>作者:{{ article.author }} | 发布于:{{ article.created_at }}</p>
第五步:评论功能
-
评论表单:在
forms.py中定义评论表单:from django import forms
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['content'] -
评论视图:在
views.py中实现评论功能:from .forms import CommentForm
def article_detail(request, pk):
article = get_object_or_404(Article, pk=pk)
comments = article.comments.all()
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.article = article
comment.user = request.user
comment.save()
return redirect('blog:article_detail', pk=pk)
else:
form = CommentForm()
return render(request, 'blog/article_detail.html', {
'article': article,
'comments': comments,
'form': form
}) -
文章详情页展示评论:修改
article_detail.html,展示评论和评论表单:<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
<h3>评论</h3>
<ul>
{% for comment in comments %}
<li>{{ comment.user }}: {{ comment.content }}</li>
{% endfor %}
</ul>
<h3>发表评论</h3>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">提交</button>
</form>
总结
到这里,我们已经完成了一个较为复杂的Django博客项目,包含了用户注册登录、文章发布、评论功能等。学到这里,我给大家留了一个作业,这个项目可以继续扩展,比如添加分页、文章标签、文章搜索等功能。希望大家学以致用!好了,本期我们就学到这里啦,我们下期不见不散!


