一個py文件也能構建django服務

今天在使用vue框架開發系統的時候,須要用到後端接口,可是接口尚未開發。便想使用最簡單的方式構建一個極簡的API服務,因爲本人偏心Django框架,便想能不能用Django框架簡單的構建想Flask那樣的單文件web服務。果真,被我找到了,摘錄分享給你們。vue

# app.py 
import os
import sys
from dataclasses import dataclass

from django.conf import settings
from django.core.wsgi import get_wsgi_application
from django.http import HttpResponseRedirect, JsonResponse
from django.urls import path
from django.utils.crypto import get_random_string

# django 的配置文件,至關於 settings.py 配置文件,可直接在這裏添加和刪除
# 下邊已是最簡的Django 啓動須要的參數了
settings.configure(
    DEBUG=(os.environ.get("DEBUG", "") == "1"),
    ALLOWED_HOSTS=["*"],  # Disable host header validation
    ROOT_URLCONF=__name__,  # Make this module the urlconf
    SECRET_KEY=get_random_string(
        50
    ),  # We aren't using any security features but Django requires this setting
    MIDDLEWARE=["django.middleware.common.CommonMiddleware"],
)

# 使用dataclass 裝飾器模擬了 model。
@dataclass
class Character:
    name: str
    age: int

    def as_dict(self, id_):
        return {
            "id": id_,
            "name": self.name,
            "age": self.age,
        }

# 列舉數據,徹底能夠直接使用字段來構造須要返回的數據
characters = {
    1: Character("Rick Sanchez", 70),
    2: Character("Morty Smith", 14),
}

# Django View 部分,爲方便簡單直接使用 function base view 
def index(request):
    return HttpResponseRedirect("/characters/")

def characters_list(request):
    return JsonResponse(
        {"data": [character.as_dict(id_) for id_, character in characters.items()]}
    )

def characters_detail(request, character_id):
    try:
        character = characters[character_id]
    except KeyError:
        return JsonResponse(
            status=404,
            data={"error": f"Character with id {character_id!r} does not exist."},
        )
    return JsonResponse({"data": character.as_dict(character_id)})

# Django route 部分,同 url.py 
urlpatterns = [
    path("", index),
    path("characters/", characters_list),
    path("characters/<int:character_id>/", characters_detail),
]

# 構建 uwsgi 使用 application 可以使用 uwsgi 等 WSGI 協議的軟件啓動。 
app = get_wsgi_application()

if __name__ == "__main__":
    # 引入命令行啓動方式函數,方便直接啓動測試, 同 manage.py 文件
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
複製代碼

直接運行以下命令便可啓動服務:python

python app.py runserver
複製代碼

還能夠使用 uwsgi 等應用程序啓動。如使用 gunicorn 以下:web

gunicorn app:app
複製代碼

但願能夠幫助到你~django

更多的Django 單文件的測試及構建方法能夠到Adam Johnson(Django 技術委員會成員,英國Django MeetUp的組織者)的博客查閱。後端

相關文章
相關標籤/搜索