基于Python Django写博客(二) - 首页

本文我们将完成一个首页。

文章目录


注册APP

当一个Django项目足够庞大时,我们可以把项目分为几个APP单独开发。 如果项目是XX大学的话,那么APP就是XX学院。

——Python学习网

打开CMD,创建一个文章管理APP:

PYTHON manage.py startapp article

打开HZHBBS\settings.py,注册APP:

...

INSTALLED_APPS = [
    ...
    'article',  # 新增代码,用于注册article
]

...

url配置

HZHBBS目录配置

article已经创建完毕了,接下来到了url配置。
清空HZHBBS\urls.py中的所有代码,用以下代码覆盖:

HZHBBS\urls.py

from django.urls import path, include
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('article.urls', namespace='article')),
]
  • urlpatterns - 存储url的列表。
  • include(‘article.urls’, namespace=‘article’) - 包含了article的url,并将命名空间设为article。

article目录配置

新建article/urls.py,输入:

article/urls.py

from django.urls import path

app_name = 'article'  # 必须写,为app的名称

urlpatterns = [

]

模板目录配置

用户发送请求的时候,视图会返回一个响应,响应可以是一个重定向,一个404错误,一个XML文档,一张图片或者是一个HTML内容的网页。前面几个返回的信息比较有限,我们重点更多是放在HTML内容的网页。我们把这样的页面按规范写好,然后都放在项目根目录下的templates文件夹里,这样的页面,我们称之为"模板"页面。

——Django中文网

修改HZHBBS\settings.py

HZHBBS\settings.py

...

from pathlib import Path

import os

...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 修改这行
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
            ],
        },
    },
]

...

模型

  • 通常情况,一个模型对应数据库的一张表。
  • Django中,模型以类(Class)的形式出现。
  • 模型包含了一些字段以及数据的一些行为。
  • 只需要在类里面进行操作,就可以操作数据库,表,不需要直接使用数据库语句。
  • 我们通过创建类来创建数据表,所以对数据库的操作,都是对类与对类的对象进行操作,而不使用数据库语句。


    ——CSDN

打开article/models.py,创建一个Article模型:

article/models.py

from django.contrib.auth.models import User
from django.utils import timezone
from django.db import models

class Article(models.Model):
	title = models.CharField(max_length=80)  # 文章标题,最大字数为80
	description = models.CharField(max_length=150)  # 文章简介
	content = models.TextField()  # 文章正文
	author = models.ForeignKey(User, on_delete=models.CASACDE)  # 文章作者,一个用户对应多篇文章,用户删除则文章删除
	looks = models.PositiveIntegerField(default=0)  # 观看量,默认为0
	created = models.DateTimeField(default=timezone.now) # 创作时间
	updated = models.DateTimeField(auto_now=True)  # 更新时间
	
	def __str__(self):
		return self.title  # 将显示信息设为文章标题

更新数据库

每次更新完models.py,都要更新数据库,Django会检测你对模型的更改。
打开CMD,输入以下两条指令:

PYTHON manage.py makemigrations
PYTHON manage.py migrate

视图

一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应。
响应可以是一个 HTML 页面、一个 404 错误页面、重定向页面、XML 文档、或者一张图片…
无论视图本身包含什么逻辑,都要返回响应。代码写在哪里都可以,只要在 Python 目录下面,一般放在项目的 views.py 文件中。


——Runoob

打开article/views.py,输入以下代码:

article/views.py

from django.shortcuts import render

from .models import Article

def index(request):
	articles = Article.objects.all().order_by('-created')  # 获取所有文章并以创作时间倒着排序
	
	context = {'articles': articles}
	return render(request, 'article/index.html', context)  # 使用article/index.html模板并将articles传入模板

模板

根据以下的目录新建文件/文件夹:

.
│  manage.py
│ 
│  ...
│
└─templates
    └─article
            index.html

编辑templates/article/index.html

templates/article/index.html

{% for article in articles %}
	<h3>{{ article.title }}</h3>
{% endfor %}
  • {% for … %} - Django模板的for循环语法。
  • {{ article.title }} - 获取文章标题。
  • {% endfor %} - 用于标记结束for循环。

激动人心的时刻

是时候该运行项目了!先配置一下url:

article\urls.py

...

from . import views

...

urlpatterns = [
	path('', views.index, name='index'),
]

运行项目!

打开CMD,输入运行项目的代码:

PYTHON manage.py runserver

如果出现以下字样就算成功了:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 11, 2021 - 20:38:48
Django version 4.0, using settings 'HZHBBS.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

打开浏览器,在地址栏里输入http://127.0.0.1:8000/(倒数第二行的网址)。
为什么页面是空白的?我们还没有写过文章呢!


admin后台配置

打开article\admin.py,输入:

article\admin.py

from django.contrib import admin

from . import models

admin.site.register(models.Article)  # 将文章模型注册到admin

打开CMD,创建一个超级用户:

PYTHON manage.py createsuperuser

按照提示做下去,用户就创建成功了!
继续运行项目,访问http://127.0.0.1:8000/admin/,登录,选择Articles,点右上角的增加 ARTICLE,填写表单。
多填写几条数据,用于测试。
George写分别是TEST #1TEST #2TEST #3


再次运行

运行后,浏览器上应该是刚才文章的标题。
基于Python Django写博客(二) - 首页
成功了!但是界面太难看了,下一篇文章将美化页面。


总结

本文我们制作了首页。


有疑问请私信我Email:h18989847468@163.com

上一篇:分布式框架之:Dubbo + Zookeeper 一步曲


下一篇:Docker学习