文章目录本文我们将完成一个首页。
- 注册APP
- url配置
- HZHBBS目录配置
- article目录配置
- 模板目录配置
- 模型
- 更新数据库
- 视图
- 模板
- 激动人心的时刻
- 运行项目!
- admin后台配置
- 再次运行
- 总结
注册APP
当一个Django项目足够庞大时,我们可以把项目分为几个APP单独开发。 如果项目是XX大学的话,那么APP就是XX学院。
——Python学习网
打开CMD,创建一个文章管理APP:
PYTHON manage.py startapp article
打开HZHBBSsettings.py,注册APP:
...
INSTALLED_APPS = [
...
'article', # 新增代码,用于注册article
]
...
url配置 HZHBBS目录配置
article已经创建完毕了,接下来到了url配置。
清空HZHBBSurls.py中的所有代码,用以下代码覆盖:
HZHBBSurls.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/urls.py,输入:
article/urls.py from django.urls import path app_name = 'article' # 必须写,为app的名称 urlpatterns = [ ]
模板目录配置
用户发送请求的时候,视图会返回一个响应,响应可以是一个重定向,一个404错误,一个XML文档,一张图片或者是一个HTML内容的网页。前面几个返回的信息比较有限,我们重点更多是放在HTML内容的网页。我们把这样的页面按规范写好,然后都放在项目根目录下的templates文件夹里,这样的页面,我们称之为"模板"页面。
——Django中文网
修改HZHBBSsettings.py:
HZHBBSsettings.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的context传入模板
模板
根据以下的目录新建文件/文件夹:
.
│ manage.py
│
│ ...
│
└─templates
└─article
index.html
编辑templates/article/index.html:
templates/article/index.html
{% for article in articles %}
{{ article.title }}
{% endfor %}
- {% for … %} - Django模板的for循环语法。
- {{ article.title }} - 获取文章标题。
- {% endfor %} - 用于标记结束for循环。
激动人心的时刻
是时候该运行项目了!先配置一下url:
articleurls.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后台配置
通过后台可以任意更改模型数据。
打开articleadmin.py,输入:
articleadmin.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 #1,TEST #2,TEST #3。
再次运行
运行后,浏览器上应该是刚才文章的标题。
成功了!但是界面太难看了,下一篇文章将美化页面。
总结
本文我们制作了首页,了解了模型、视图、模板。
有疑问请私信我Email:h18989847468@163.com。



