Django 个人博客搭建 (2)- 编写视图

本贴最后更新于 1774 天前,其中的信息可能已经东海扬尘

一. 视图简介

  • 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,kwargsname
    注意: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. 测试

三. 搭建后台

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 和使用技巧。若有错误或疏漏之处,小伙伴可以在下方留言。

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • Django
    47 引用 • 72 回帖 • 4 关注
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...