老闆讓我一週上線一個網站的一些記錄(下)

在我的上一篇博客寫了些在建站的過程中,阿里雲服務器的選擇,以及服務器環境配置時遇到的坑。

本篇打算分享一下在使用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的配置,給我和我的小夥伴留下了揮之不去的心理陰影。直到現在,我還記得我那時的慌張與無措。好在,現在開源的框架越來越輕量,調用越來越簡便,但是,這種代碼量解放的同時,又有多少人被奴役進來了呢?

總之,管理員界面就這樣縫縫補補的建起來了。整個網站的搭建也算是告一段落。

後續還有很多要完善的地方,我要拉着我的小夥伴對需求去了,告辭。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章