摘要:近年來,隨著人們生活水平的不斷提高,旅游行業(yè)越來越受到人們的關(guān)注。文章介紹了如何以Python編程語言和Django Web作為應(yīng)用框架,搭配MySQL數(shù)據(jù)庫管理系統(tǒng)設(shè)計并實現(xiàn)一個旅游景點網(wǎng)站,以期為旅游行業(yè)的發(fā)展提供一定的幫助。
關(guān)鍵詞:Django;Python;MySQL;網(wǎng)站設(shè)計與實現(xiàn)
doi:10.3969/J.ISSN.1672-7274.2023.06.019
中圖分類號:TP 393.029" " " " " "文獻標志碼:B" " " " " " "文章編碼:1672-7274(2023)06-00-03
Abstract: In recent years, with the continuous improvement of people's living standards, the tourism industry has attracted more and more attention. This article introduces how to design and implement a tourist attraction website using Python programming language and Django Web as an application framework, coupled with MySQL database management system, in order to provide some help for the development of the tourism industry.
Key words: Django; Python; MySQL; Website design and implementation
1" 相關(guān)技術(shù)
1.1 Python語言介紹
Python作為一種簡單實用的編程語言,具有很好的可閱讀性,對于初學者來說比較容易上手。它提供了高效的數(shù)據(jù)結(jié)構(gòu),能有效地面向?qū)ο缶幊蘙1];底層是用C語言寫的,因此運行速率非常快[2]?,F(xiàn)在越來越多的人開始使用Python,它被廣泛應(yīng)用于人工智能、云計算開發(fā)、自動化運維及Web開發(fā)等領(lǐng)域。
1.2 Django框架介紹
Django是由Python編寫的一個開源Web應(yīng)用框架,它提供了大量的特性和工具且具有完善的在線文檔,使得開發(fā)人員只需較少的代碼即可完成網(wǎng)站開發(fā)的大部分內(nèi)容。Django遵循的是MVC設(shè)計模式,這使得它具有開發(fā)快速、可重用性高、維護成本低等優(yōu)點。
1.3 MySQL數(shù)據(jù)庫介紹
MySQL是當下最好且最流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng)之一,它使用標準的SQL數(shù)據(jù)語言,可以運行于多個系統(tǒng),支持Python、C、C++等多種編程語言,具有成較低、體積小、速率快的優(yōu)點,是一般中小企業(yè)網(wǎng)站開發(fā)的首選數(shù)據(jù)庫。
2" 技術(shù)架構(gòu)
網(wǎng)站設(shè)計方案采用了前后端分離的架構(gòu),前端的實現(xiàn)使用了HTML+CSS+JQuery,后端使用了MySQL數(shù)據(jù)庫對數(shù)據(jù)進行管理,通過Django框架對瀏覽器的請求進行響應(yīng),通過路由文件找到相應(yīng)視圖文件中對應(yīng)函數(shù),對頁面進行渲染,實現(xiàn)前后端聯(lián)動。
2.1 工具介紹
使用Pycharm進行前后端開發(fā),除了具有IDE的基本功能,還能夠支持Django框架下的Web開發(fā),對于初學者來說是一個不錯的選擇。
使用Navicat對數(shù)據(jù)庫進行管理,可以創(chuàng)建多個連接,用于管理MySQL、Oracle、SQLite等不同類型的數(shù)據(jù)庫,具有非常友好的圖形用戶界面,可以完成對數(shù)據(jù)庫的增刪查改等操作。
2.2 搭建環(huán)境
(1)安裝Pycharm、Django、MySQL以及Navicat。
(2)選擇存儲代碼的目錄,將命令行切換到該路徑,執(zhí)行命令django-admin startproject jltravl_project,本項目名稱為jltravl_project,該命令會自動生成一系列的目錄和文件。
(3)在Django中創(chuàng)建一個應(yīng)用:python manage.py startapp travl_app,命令會在jltravl_project的目錄下生成一個travl_app文件夾,并且會生成一些相關(guān)文件。
(4)設(shè)置settings.py文件,主要內(nèi)容如下:
①將'simpleui'和'travl_app'添加到INSTALLED_APPS。
②數(shù)據(jù)庫的設(shè)置修改為:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': '3306',
'USER': 'root',
'PASSWORD': '123456',
'NAME': 'travl_demo',
}
}
③使得Admin 后臺管理系統(tǒng)更改為中文:LANGUAGE_CODE = 'zh-hans'。
(5)使用命令對數(shù)據(jù)庫進行生成及遷移:python manage.py makemigrations;python manage.py migrate。
(6)使用Admin后臺管理,生成管理員賬號:執(zhí)行python manage.py createsuperuser,并輸入相關(guān)信息。
3" 設(shè)計與實現(xiàn)
3.1 MVT架構(gòu)
目前,在基于Python的Web開發(fā)框架中,幾乎所有的全??蚣芏紡娭苹蛞龑ч_發(fā)者使用MVC設(shè)計模式。Django基于MTV模式,即模型(Model)、模板(Template)和視圖(View),它對傳統(tǒng)的MVC設(shè)計模式進行了修改,將視圖分成View模塊和Template模塊兩部分,將動態(tài)的邏輯處理與靜態(tài)的頁面展示分離。而Model采用ORM技術(shù),將關(guān)系型數(shù)據(jù)庫表抽象成面向?qū)ο蟮腜ython類,將數(shù)據(jù)庫的表操作轉(zhuǎn)換成Python的類操作,避免了編寫復雜的SQL語句。
3.1.1 設(shè)計模型
將Python語句翻譯為數(shù)據(jù)庫語句,這個工具就是ORM(對象關(guān)系映射)。Django自帶ORM系統(tǒng),它體現(xiàn)在框架內(nèi)就是模型層,模型負責與數(shù)據(jù)庫進行交互,在Python中定義一個類,就是一個模型,即代表數(shù)據(jù)庫中的一張表。
把對數(shù)據(jù)庫的操作寫入到應(yīng)用的models.py中,本方案設(shè)計了五個類:class WebConfig用于對網(wǎng)頁的基礎(chǔ)信息進行管理,當對一些基礎(chǔ)信息進行變更時,網(wǎng)站的維護人員不必一頁頁修改網(wǎng)站的基礎(chǔ)信息;class Nav用于對網(wǎng)頁的導航欄進行管理;class Category用于對景點的分類進行管理;class View用于對景區(qū)景點進行管理;class Message_center用于對評論進行管理。
3.1.2 定義視圖
視圖層是框架的核心,通過接收請求,調(diào)用相應(yīng)的模板函數(shù),實現(xiàn)數(shù)據(jù)庫和前端的聯(lián)動。在視圖層要編寫視圖函數(shù),將這些函數(shù)寫入到應(yīng)用的views.py文件中,視圖函數(shù)用于接收用戶請求,并且返回響應(yīng)。函數(shù)返回的內(nèi)容可以是網(wǎng)頁、重定向等任何內(nèi)容,最好是返回某種響應(yīng)。
以下是本網(wǎng)站的一個視圖函數(shù)的代碼,這個函數(shù)用于獲取用戶留言信息,并將信息展示出來:
def feedback_show(request):
title = request.GET.get(\"title\")
name = request.GET.get(\"name\")
tel = request.GET.get(\"tel\")
email = request.GET.get(\"email\")
message_context = request.GET.get(\"message_context\")
m = Message_center(title=title, name=name, tel=tel, email=email, message_context=message_context)
m.save()
context = { \"message_list\": Message_center.objects.all() }
return render(request, 'feedback_show.html', context)
3.1.3 編寫模板
模板實際上是HTML文件,用于通過瀏覽器向用戶展示渲染過的網(wǎng)頁。通過模板實現(xiàn)業(yè)務(wù)邏輯和顯示內(nèi)容的分離。對于模板的具體操作步驟如下。
(1)在項目的目錄即jltravl_project下新建templates文件夾,在此文件夾下再新建一個與應(yīng)用同名的文件夾即travl_app,然后再在該文件夾下存放所需要展示的HTML模板文件。
(2)需要讓Django找到模板文件,就要在settings.py中修改參數(shù),即在TEMPLATES中修改DIRS。
(3)在views.py中定義相關(guān)函數(shù),對網(wǎng)頁進行渲染。下面是在feedback_show.html中編寫的部分內(nèi)容,通過這個模板,展示所有的用戶留言信息:
lt;ulgt;
{% for result in message_list %}
lt;li class=\"clearfix\"gt;
lt;div class=\"news_left\"gt;
lt;a href=\"news.html\"gt;{{ result.title}}lt;/agt;
lt;pgt;
{{ result.message_context}}
lt;/pgt;
lt;/divgt;
lt;div class=\"news_right\"gt;
lt;spangt;10.22lt;/spangt;
lt;timegt;2021lt;/timegt;
lt;/divgt;
lt;/ligt;
{% endfor %}
lt;/ulgt;
3.2 路由文件
把路由轉(zhuǎn)發(fā)內(nèi)容寫入到urls.py文件中,當用戶發(fā)來請求時,通過匹配到的邏輯代碼,執(zhí)行相應(yīng)的視圖函數(shù)。這里是通過修改urlpatterns來配置每個路由的。一般在程序中會有一個根urls.py文件,是生成項目文件自帶的,在每個應(yīng)用下會有一個子urls.py,需要根據(jù)項目情況設(shè)置子urls.py。
以下是在本項目urls.py中的部分內(nèi)容,當遇到travl/路徑時,就會跳轉(zhuǎn)到travl_app.urls去:
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = (\"id\",\"name\",\"parent\")
empty_value_display=format_html('lt;span style=\"color:red\"gt;一級分類lt;/spangt;')
3.3 Admin管理后臺
Django中的Admin管理后臺為程序員提供了一個相當友好的界面用于管理用戶和數(shù)據(jù),通過這個可視化的界面——其實是Web站點,我們可以輕松實現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的增刪查改。本方案通過注冊裝飾器來進行操作,將上文提到的網(wǎng)站所用的五個類(WebConfig、Nav、Category、View、Message_center)都進行注冊,寫入到應(yīng)用的admin.py文件中,這樣便于數(shù)據(jù)的操作和管理,對于Admin管理后臺的操作步驟具體如下。
(1)輸入python manage.py createsuperuser,按照提示輸入用戶名和密碼等信息。
(2)啟動服務(wù)器,在網(wǎng)頁上輸入http://127.0.0.1:8000/admin/,登錄后即可進入管理界面。
(3)在上文中已介紹了對模型進行注冊,所以在這個界面下,可以直接對數(shù)據(jù)進行增刪查改操作,非常便捷。
以下是部分注冊模型的代碼及圖1 Admin管理后臺的展示截圖:
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = (\"id\",\"name\",\"parent\")
empty_value_display=format_html('lt;span style=\"color:red\"gt;一級分類lt;/spangt;')
4" 結(jié)束語
本文使用Python語言通過Django框架,結(jié)合MySQL數(shù)據(jù)庫設(shè)計并實現(xiàn)了一個簡單的旅游景點網(wǎng)站,通過這個項目,筆者感受到了Python語言的強大和便捷,也體會到Django框架自帶的豐富工具及健全的文檔。本方案還有一些不足之處,如一些模塊的功能仍不太完善,需要繼續(xù)進行修改和細化。
參考文獻
[1] Python教程-Python3.9.1文檔[Z].Python官方.2020-10-05. https://baike.baidu.com/reference/407313/5b37f0qgw_UbgSv6r-ci9fX3V94HLy3YOj6_kSa1FnTMOCLSaf8naGWHHQv3hPLlTah2-EKtH_uj0wb0iVB0WgtuypJk_i0Zx3Aco-Y7RCs
[2] Python CGI編程[Z].自強學堂. https://code.ziqiangxuetang.com/python/python-cgi.html