為了解決如何在網頁上運行 python 腳本這問題,當時花費不少時間研究和踩過了不少坑,因此將步驟詳細記錄下來,希望能幫助到想利用網頁寫一個簡單的 python 程式的人。
如果有第一次接觸 Django 的朋友可以參考之前寫的這篇:[Django教學] 5分鐘快速入門,打造一個簡單Python網頁
Table
一. 安裝 Django
Mac 版安裝 Django:
1 |
pip install django #在終端機內輸入 |
Window 版安裝 Django:
安裝好後創建第一個 Project:
1 |
django-admin startproject first #在終端機內輸入 |
創建第一個 APP:
1 2 |
cd first #在終端機內輸入 django-admin startapp home #在終端機內輸入 |
first > settings.py 裡面 INSTALLED_APPS 加入 home
1 2 3 4 5 6 7 8 9 10 |
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'home', ] |
首先看一下最終的目錄會是如下:
|– first
| |– __init__.py
| |– settings.py
| |– urls.py
|
-- wsgi.py
| -- home
| |-- __init__.py
| |-- views.py
| |-- urls.py
| |-- test.py
| |-- apps.py
| |-- models.py
| — admin.py
| — templates
|
--simple_crawl.html
— manage.py
二. 將 Python 腳本放到 home > Views.py內
這邊寫了一個簡單的爬蟲,僅抓取網頁的標題並存在 title 內,最後 return render(request, ‘home/simple_crawl.html’,locals()) 這邊是告訴 Django render 這個 simple_crawl.html 頁面
1 2 3 4 5 6 7 8 9 10 |
fromdjango.shortcutsimportrender,HttpResponse frombs4importBeautifulSoup importrequests def simple_crawl(request): url = "<a href="https://www.maxlist.xyz/">https://www.maxlist.xyz/</a>" res = requests.get(url) soup = BeautifulSoup(res.text,"html.parser") title = soup.select('title') return render(request,'home/simple_crawl.html',locals()) |
三. 建立 simple_crawl.html 頁面
路徑:home > templates > simple_crawl.html
1.在 home 資料夾內新建 templates 資料夾
2.在 templates 資料夾內新建 simple_crawl.html
我們會將爬取到的內容在 simple_crawl.html 這個頁面上顯示,可以看到我們這邊用{{ title }} ,這是 Django 特定寫法
1 2 3 4 5 6 7 8 9 |
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> </head> <body> <h1>爬取的網頁是{{title}}</h1> </body> </html> |
然後在 first > setting.py 內TEMPLATES 裡面 ‘DIRS’ :[ ] 改成 ‘DIRS’ : [os.path.join(BASE_DIR, ‘templates’).replace(‘\\’, ‘/’)],
這邊是要告訴 Django,我們有設置 templates 資料夾,要 Django 從這路徑去找templates
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
TEMPLATES = [ { 'BACKEND':'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates').replace('\\','/')], 'APP_DIRS':True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] |
四. urls設定
在 first > urls.py 將設定修改如下,這邊新增了path(‘home/’, include(‘home.urls’)),告訴 Django 當有人踩 ‘home/’ 這個網址時,要去 include(‘home.urls’) 這裡找檔案,所以接下來就是建置 ‘home.urls’
1 2 3 4 5 6 7 |
fromdjango.contribimportadmin fromdjango.urlsimportpath,include urlpatterns = [ path('admin/',admin.site.urls), path('home/',include('home.urls')), ] |
在 home 資料夾內新建 urls.py,所以當 Django 找到 ’home.urls’ 時,他會讀取到 path(”, views.simple_crawl),這邊的意思是叫 Django 去 view 裡面找simple_crawl,也就是我們最一開始將 Python 腳本寫進的 def simple_crawl(request) 內,接下就來會開始運行 Python 爬蟲腳本,並將資料顯示標題於網頁上囉!
1 2 3 4 5 6 |
fromdjango.urlsimportpath from.importviews urlpatterns = [ path('',views.simple_crawl), ] |
最後運行指令:
1 |
python manage.py runserver |
基本上這就是一個簡單的在網頁上運行 Python 腳本的網頁,希望對大家有幫助!
Django 教學相關的延伸閱讀:
- [Django教學] 5分鐘快速入門,打造一個簡單Python網頁
- [Django教學] 如何在Django網頁上運行python腳本
- [Django教學] 取得Django網頁資料並運行Python腳本
Python 教學相關的延伸閱讀:
- [Python教學] pip install 指令大全
- [Python教學] 寫給新手的 Python 入門基礎操作
- [Python教學] 使用 pyenv 和 virtualenv 打造 Python 環境配置
- [Git教學] 寫給Git初學者的入門 3 步驟
- Visual Studio Code 必備的 5 個擴充和小常識
那 [Django教學] 如何在 Django 網頁上運行 python 腳本 的介紹就到這邊告一個段落囉!有任何問題可以在以下留言~
有關 Max行銷誌的最新文章,都會發佈在 Max 的 Facebook 粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!
在〈【Django教學】 如何在網頁上運行 python 腳本〉中有 2 則留言
版主您好 謝謝分享此文
我檢查了幾次 也重新照流程跑了幾次
但是runserver之後 一直給的回報是404 (Request Method: GET)
Using the URLconf defined in first.urls, Django tried these URL patterns, in this order:
admin/
home/
The empty path didn’t match any of these.
若再check分頁 /home 則得到
Exception Type: TemplateDoesNotExist
Exception Value:
home/simple_crawl.html
不知版主是否能給予指導究竟該去哪裡檢查code
感激
HI 你好,感謝參考本篇 Django 教學
我看到你的錯誤訊息(Exception Value: home/simple_crawl.html),照理來說 simple_crawl.html 是要被放在 templates 資料夾內唷
請確認一下你 Django 新增的檔案架構是否如下:
|– first
| |– __init__.py
| |– settings.py
| |– urls.py
| `– wsgi.py
| — home
| |– __init__.py
| |– views.py
| |– urls.py
| |– test.py
| |– apps.py
| |– models.py
| `– admin.py
| — templates
| `–simple_crawl.html
`– manage.py
如果還是沒辦法解決,歡迎提供 GitHub 檔案連結,我幫你看一下
留言功能已關閉。