環(huán)境搭建(按需)
首先,我們需要?jiǎng)?chuàng)建一個(gè)適合開發(fā)的環(huán)境。在Python開發(fā)中,我們通常會(huì)使用虛擬環(huán)境來保持工作空間的整潔。以下是創(chuàng)建和激活虛擬環(huán)境的步驟:
# 創(chuàng)建虛擬環(huán)境
python3 -m venv myenv
# 激活虛擬環(huán)境(Linux/macOS)
source myenv/bin/activate
# 激活虛擬環(huán)境(Windows)
.\myenv\Scripts\activate
在虛擬環(huán)境中,我們可以安裝Django:
pip install Django
這將會(huì)安裝Django并且保證它不會(huì)影響到系統(tǒng)中的其他Python項(xiàng)目。
創(chuàng)建項(xiàng)目
安裝完成后,我們可以使用Django的命令行工具來創(chuàng)建一個(gè)新的項(xiàng)目:
django-admin startproject myproject
這將會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)名為myproject
的文件夾,其中包含了管理Django項(xiàng)目所需的一些文件。
創(chuàng)建應(yīng)用
在Django中,一個(gè)項(xiàng)目可以包含多個(gè)應(yīng)用,每個(gè)應(yīng)用都是一個(gè)Python模塊,包含了視圖、模型、模板、路由等一系列功能。我們首先創(chuàng)建一個(gè)名為myapp
的應(yīng)用:
cd myproject
python manage.py startapp myapp
這會(huì)在myproject
目錄下創(chuàng)建一個(gè)myapp
的目錄,包含了管理應(yīng)用所需的一些文件。
定義視圖
接下來,我們需要定義視圖來處理HTTP請求。在myapp/views.py
文件中,我們可以定義一個(gè)視圖來處理GET和POST請求:
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def hello(request):
if request.method == 'GET':
return JsonResponse({'message': 'Hello, Django!'})
elif request.method == 'POST':
return JsonResponse({'message': 'POST request received.'})
這里,我們使用了JsonResponse
來返回JSON響應(yīng),用@csrf_exempt
來豁免CSRF保護(hù),以便于我們在測試時(shí)能方便地發(fā)送POST請求。
配置路由
視圖定義完成后,我們還需要配置路由來將URL映射到視圖。在myapp/urls.py
文件中,我們可以定義路由:
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello),
]
然后,在myproject/urls.py
文件中,我們需要包含myapp
的路由:
from django.urls import include, path
urlpatterns = [
path('myapp/', include('myapp.urls')),
]
這樣,訪問/myapp/hello/
URL時(shí),就會(huì)調(diào)用我們定義的hello
視圖。
啟動(dòng)服務(wù)
最后,我們可以啟動(dòng)Django服務(wù)來測試我們的應(yīng)用:
python manage.py runserver
現(xiàn)在,你可以使用瀏覽器訪問http://localhost:8000/myapp/hello/
,你將看到返回的{"message": "Hello, Django!"}
。你也可以使用工具(如curl或Postman)發(fā)送POST請求,你將看到返回的{"message": "POST request received."}
。
恭喜你!你已經(jīng)成功地從零開始部署了一個(gè)使用Django框架的Python服務(wù)。
項(xiàng)目文件夾和代碼一覽
最后提供給大家,在我們的Django項(xiàng)目中,我們會(huì)看到以下文件結(jié)構(gòu):
myproject/
├── manage.py
├── myapp/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations/
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── myproject/
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
在這個(gè)結(jié)構(gòu)中,我們主要關(guān)注的是myapp/views.py
,myapp/urls.py
,和myproject/urls.py
這三個(gè)文件,因?yàn)檫@三個(gè)文件是我們在部署Django服務(wù)中修改的主要文件。
myapp/views.py
在myapp/views.py
文件中,我們定義了一個(gè)hello
視圖來處理GET和POST請求。完整的代碼如下:
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def hello(request):
if request.method == 'GET':
return JsonResponse({'message': 'Hello, Django!'})
elif request.method == 'POST':
return JsonResponse({'message': 'POST request received.'})
myapp/urls.py
在myapp/urls.py
文件中,我們定義了一個(gè)路由來將/hello/
的URL映射到hello
視圖。如果文件不存在,請創(chuàng)建并添加以下內(nèi)容:
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello),
]
myproject/urls.py
在myproject/urls.py
文件中,我們包含了myapp
的路由,將所有以/myapp/
開頭的URL映射到myapp
的路由。完整的代碼如下:
from django.urls import include, path
urlpatterns = [
path('myapp/', include('myapp.urls')),
]
以上便是我們創(chuàng)建的Django服務(wù)的全部代碼和文件結(jié)構(gòu)。