一. 视图简介
-
Django 基于 MTV 模式,M 为 model 模型,T 为 template 模板,V 为 view 视图。
-
M 模型层负责处理数据相关的业务和关系,T 模板层处理页面数据的显示,V 视图层接收处理请并处理业务逻。
-
视图 view 的概念是一类具有相同功能和模板的网页的集合。每一个视图表现为一个 python 函数,而 django 将根据用户请求的 URL 去寻找视图,也就是说每一个视图都与一个 URL 相映射。
二. 编写一个简单视图
1. 编写视图
-
接下来我们将编写一个视图,其功能为向浏览器返回"Hello Django!"。
-
首先在 front_blog 该 App 中的 views.py 中编写如下名称为 artile_list 的函数。
from django.http import HttpResponse
from django.shortcuts import render
def article_list(request):
return HttpResponse('Hello Django!')
- 上述代码中,request 为请求,HttpResponse 是向浏览器返回对象,这个对象可以是字符串,数字,字典,元祖等 python 数据类型。在这里向浏览器返回一个值为"Hello Django!"的字符串。
2. 注册 url
-
编写完视图函数之后,需要将其注册到 urls.py 中。
-
在 front_blog 下新建一个 urls.py 文件,将视图函数注册到其中,具体代码如下。
from django.urls import path
from front_blog import views
urlpatterns = [
path('article_list', views.article_list, name='article_list'),
]
-
path 函数有四个参数,
route
,view
,kwargs
和name
。
注意:route 路由和 view 视图参数不可省略,其他可以省略第一个参数为路由参数,它会匹配一个 URL,在这里匹配的是 article_list。
第二个参数是视图参数,当 Django 根据请求 URL 匹配到了路由,它就会调用与此路由对应的视图函数。在这里将匹配 views.article_list,即 front_blog/views.py 中名称为 article_list 的视图函数。
第三个参数是字典参数,可以将字典参数传递给视图,在本教程中不使用该参数。
第四个参数是命名空间参数,可以为你的 URL 命名,这样可以通过这个 name 属性的名称在任意模板中调用该 URL。
-
由于只注册了 front_blog 该 App 下的 URLconfs,还需要将此 URLconfs 分发到总 URLconfs(项目目录下的 urls.py)中。
-
修改 rainbow_blog/urls.py 文件,利用 include()函数,将 front_blog/urls.py 分发到 rainbow_blog/urls.py 中,如下。
include()的作用是当遇到此函数时,Django 会截断与此项 URL 匹配的部分,将剩余的字符串和 nclude()函数中包含的 urls.py 中的路由做进一步的匹配。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('front/', include('front_blog.urls')),
]
3. 测试
-
运行该 Django 项目,在项目根目录下输入命令行
python manage.py runserver
或者在 Pycharm 中点击绿色的运行按钮。
-
在浏览器中输入 http://127.0.0.1:8000/front/article_list 访问,浏览器显示 Hello Django! 说明大功告成。
三. 搭建后台
1. 前言
-
博客中有很多内容,例如文章、评论和标签等,这些都需要在网站后台进行管理。而 Django 自带了 admin 管理后台,功能十分强大。
本教程将使用 Django 自带的后台,我在自己博客后台中没有使用 django 自带的后台系统,在这里是为了提高开发效率。
2. 美化 admin
-
Django 自带的后台管理系统不美观,这里利用第三方库 simple-ui,一款基于 element-ui+vue 开发的后台主题对其进行美化。
-
利用
pip install django-simpleui
命令行安装 simple-ui
-
在 rainbow_blog/settings.py 中注册 simpleui
INSTALLED_APPS = [
'simpleui', # 注册simpleui
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'admin_blog', # 后台app
'front_blog', # 前端app
]
3. 创建管理员账号
-
管理员有权登录后台,对网站的数据进行管理,可以进行一些数据的增删改查,测试并维护网站的内容和稳定性。
-
在项目根目录下输入命令行
python manage.py createsuperuser
,按要求输入用户名、密码和确定密码等即可。
4. 注册模型类至 admin
-
网站后台要对文章 Article,标签 Label,分类 Category 进行管理,所以需要将这三个模型类注册到 admin 中。
-
修改 admin_blog/admin.py 文件,将模型类注册到 admin 中,如下。
from django.contrib import admin
# 导入模型类
from admin_blog.models import Article, Category, Label
# 注册
admin.site.register(Article)
admin.site.register(Category)
admin.site.register(Label)
5. 测试
-
运行 Django 项目,在浏览器中输入 http://127.0.0.1:8000/admin 访问。
-
输入之前注册的管理员账号和密码,进入后台。
-
发现界面都是英文,需要修改 rainbow_blog/settings.py 的语言选项,顺便修改时区为中国上海时区(防止读取数据库时间出错,Django 默认时区是芝加哥时区)。
LANGUAGE_CODE = 'zh-hans' # 修改语言
TIME_ZONE = 'Asia/Shanghai' # 设置时区
# USE_I18N = True
# USE_L10N = True
USE_TZ = False # 改为False
-
刷新后台界面,界面文字切换成中文了。
-
我们点击 Admin_Blog,发现下拉框恰好有我们之前注册的三个模型名称,分别为 Article 文章,Category 分类和 Label 标签。
-
点击 Category,然后点击添加,输入
后台
,然后保存。
-
点击 Label,然后点击添加,输入
django
,选择 Category,然后保存。
-
点击 Article,然后点击添加,选择并输入信息,然后保存。
-
在 Pycharm 中查看项目根目录下的 sqlite 数据库,进入文章表,发现文章已经添加成功。
这次主要讲述了如何编写视图,还有路由的配置以及在 admin 中添加文章。下篇博文将讲述如何定制 admin 和使用技巧。若有错误或疏漏之处,小伙伴可以在下方留言。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于