老板让我一周上线一个网站的一些记录(下)

在我的上一篇博客写了些在建站的过程中,阿里云服务器的选择,以及服务器环境配置时遇到的坑。

本篇打算分享一下在使用Django后的感受,以及搭建网站后台管理员界面(admin.py)时遇到的问题。

1 Django使用后感受

      使用之后的第一个感觉就是Django的组成很简单。

  •       首先,其规定了html、css、js等文件的存放位置(template、static等);
  •       其次,其规定了后台响应程序(views)、数据库连接(models)、管理员界面(admin)以及配置设置(setting)等coding位置;
  •       最后,从生成应用文件(app),以我这里的app名称'pageContent'为例:
python manage.py startapp pageContent

        到运行网站

python manage.py runserver

       以及自动生成数据库models,迁移数据库信息(migrate)等都是都是使用manage.py进行的,有一拳超人走天下的感觉。

       Terminal中直接输入以下可以了解更多。

python manage.py

此外,项目可以使用Pycharm的Django项目自动生成,如图1 所示(图丑求轻喷)。

图1 Pycharm下的Django结构图题

 

     第二个是能感受到Django结构的严格限制。Django的Project文件命名有严格的要求,如“template”就是用来存放html页面的、“static”(静态)指的是可以被静态文件的形式访问,可以直接通过url中加入‘/static/+文件名’直接访问,我导的任务之一是下载一个文件,我这边实现起来就是先把文件放到static下的doc文件夹中(/static/doc/xxx.doc)加上链接<a>进行访问并下载。放到其他非static文件夹就不行了。总之,像“template”、“static”的文件名都不要改名使用。

人类制定了规则,规则又回来反制人类,妙啊

2 收获到的一篮子知识点

2.1 INSTALLED_APPS加入app名称 

添加app的名称在setting.py文件中的INSTALLED_APPS配置列表里:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'pageContent',  # 我的app名称 要加入进来
]

我这里的app名称是'pageContent',如果这里不加入,后面自动生成数据库models会遇到bug。好习惯随手养成。


2.2 html中涉及到表单提交需要添加“{%csrf_token%}

添加这个标签目的是防止csrf(跨站请求伪造),即防止黑客盗用我网站上的cookies内容。

在渲染模板的时候,Django可以把这句{%csrf_token%}替换成一个<input type="hidden",name="csrfmiddlewaretoken", value=xxxxx(一个随机的token)>元素,提交表单内容的时候完成加密。

更多可以参见:Django的csrf保护机制

添加的位置为form标签下数第一行的位置,样例如下 :

<form enctype="multipart/form-data" id="form02" method="post">
    {%csrf_token%}
    <div class="inner"..(省略表单内容部结构)..><input type="hidden" name="id" value="form02">
</form>

2.3 Django自带管理员界面的生成

生成管理员界面需要预先把数据库相关内容配置好,下面是我配置的过程:

# 刷新数据库的信息
python manage.py makemigrations
python manage.py migrate
python manage.py inspectdb > pageContent/models.py

# 创建管理员账号
python manage.py createsuperuser

有关makemigrations和migrate的原理可以参考官方文档:更多关于迁移(migrate)的理解

然后需要在admin.py中进行编程,开启管理员的界面。


2.4 Django管理员界面对后台数据库中数据的管理(增删改查以外等花里古哨的功能)

from django.contrib import admin  # 引入管理员界面继承的包 
from django.utils.html import format_html
from pageContent.models import Userapp  # 存放我后台的数据库表名 Userapp

# 管理员界面入口

"""
MessageAdmin 
"""
class MessageAdmin(admin.ModelAdmin):
    """
    希望能在管理员界面直接看到我的Userapp表中的这三列内容,其中id、date是列名,和我数据库中表的列名需相同。View是我生成的列名,详细见View内置函数的解释。
    """
    list_display = ('id','date', 'View',) 

    search_fields = ('id','date',) # 界面内增加检索框,检索的字段范围为 id date,需要什么加什么
    list_per_page = 20  # 一页可以展示的数量,此处20
    ordering = ('id',)  # 排序的依据,此处升序排列,加一个负号,'-id'改为降序排列
    list_filter = ('date',)  # 增加一个侧边栏,进行时间范围的筛选 
    date_hierarchy = 'date'  # 增加一行可以用于选择具体日期

    """   
     可以在页面中加入html标签,此处的功能:
     将数据库中的'filepath'列中的pdf文件位置信息 作为超链接a标签渲染到页面中
     使管理员通过点击'查看'能直接跳转文件预览页面(或者跳出文件下载链接)
    """
    def View(self, obj):
        return format_html("<a href='{0}'>查看</a>", obj.filepath)
    View.allow_tags = True  # 加入


admin.site.site_header = '我的管理员界面'  # 修改登陆页面登陆框上的名字
admin.site.site_title = '我的管理员界面'  # 修改页面标题
admin.site.register(Userapp, MessageAdmin)  # 上面的功能加入到Userapp表中

效果如图2所示:

图2 增加上面一堆功能后的效果

更多功能可以参考文档:Django Admin界面介绍


2.5 运行Django后台不止runserver

我们使用python manage.py runserver一般会开启8000端口,这样我们通过访问http://localhost:8000就可以访问了。

但是我们平时访问的网站很少有带':8000'的情况,这是为什么呢?

因为他们开启了http协议的默认端口,即80端口。(百度百科80端口

我们在布置我们的网站的时候想使用默认端口只需要将run语句修改如下:

python manage.py runserver 0.0.0.0:80

在浏览器中输入'localhost'就可以访问了。


2.6  DEBUG=False后admin界面格式错误或加载不出

Django自带debug功能(setting.py中),可以不用我们自己写404等页面,在出错时跳转至默认页面。

开启True的效果如下:

图3 DEBUG=True时404效果图

改成False效果如下:

图4 DEBUG=False时404效果图

但是由于我们将DEBUG改成了False,会导致Admin界面发生格式加载错误的现象,如图5所示:

图5 DEBUG=False时Admin页面未加载格式效果图

怎么修改呢?

需要在run的时候再加一点内容:

python manage.py runserver 0.0.0.0:80 --insecure

加入'--insecure' 即可,刷新,熟悉的页面回来了:

图6 修改run语句之后的效果

 

如果你是在服务器上运行的,那么就可以直接在其他电脑上浏览器访问服务器的ip号来获取页面了。

不过没有经过备案可能一两个小时就会被封掉,试试就好,安心等备案吧。

 

小结

本文没有涉及到有关数据库在setting中是如何配置的,具体操作可以很容易的搜到,在此不赘述。

此外,Django自带的admin界面还可以pip一些suit来美化,django-suit·PyPI,当然大家也可以自己探索一番。

道路千万条,实现网站的方法很多。这一周我用Django搭建了一个有管理员后台的网站,收益颇丰。我又回想起四年前(我大二上学期)的那个夜晚,我用JSP在赶一个后台,厚重的Java框架,复杂的xml的配置,给我和我的小伙伴留下了挥之不去的心理阴影。直到现在,我还记得我那时的慌张与无措。好在,现在开源的框架越来越轻量,调用越来越简便,但是,这种代码量解放的同时,又有多少人被奴役进来了呢?

总之,管理员界面就这样缝缝补补的建起来了。整个网站的搭建也算是告一段落。

后续还有很多要完善的地方,我要拉着我的小伙伴对需求去了,告辞。

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值