Skip to content

twtrubiks/django_ninja_tutorial

Repository files navigation

django ninja 教學

官網介紹 Django Ninja - Fast Django REST Framework

基本上, Django Ninja 就是在 django 上多加東西而已,

有超強的 pydantic 教學, 也可以自動產生文件,

更支援 django 原生的 ORM, 非常建議大家玩玩看 😄

這邊寫了一些範例, 建議大家直接進去 docs 裡面看.

目錄

Ninja 使用方法

安裝 dev-containers, >Dev Containers: Rebuild and Reopen in Container

如果不熟悉請參考 Vscode Dev Containers 教學

先 migrate

python3 manage.py migrate

執行 django ninja

./manage.py runserver

接著進入 doc http://127.0.0.1:8000/api/docs

如果你想玩玩, 直接在這個頁面上操作即可.

example 基本上就是一些範例, 沒有和 db 互動.

sheets, musics 有和 db 互動, 並且有 ORM 的操作.

musics_other 有和 db 互動, 並且有比較複雜的 ORM 操作, 以及 django ninja Filtering 的用法.

alt tag

Django Ninja Extra

Django Ninja Extra

更方便定義 api, 範例如下

ninja_extra_api_tutorial

THROTTLE

alt tag

Ninja JWT

Ninja JWT

定義 JWT, 範例如下

alt tag

alt tag

如果你想要設定黑名單, 可以使用 Blacklist App,

使用 django admin 模擬將 refresh token 加進去黑名單, 這樣就可以強制 user 重新取 refresh token 了.

或是使用 token.blacklist() 加入黑名單,

可參考範例 /api/auth/blacklist 這個 api.

db 中 token_blacklist_outstandingtoken 紀錄 refresh token.

db 中 token_blacklist_blacklistedtoken 紀錄 blacklisted token.

Sending email 搭配 Mailpit - email testing for developers

這部份就和 Ninja 沒關係了, 單純就是 Django 而已,

一般 django 開發要寄信, 需要設定 settings.py

EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"

然後去 call api post /api/examples/send_email (簡單的範例)

接著看你的 console log

alt tag

那這時候, 有沒有比較好的方式可以看這些信 ❓

有的 😀

就是我們要介紹的 Mailpit - email testing for developers (UI 也不錯看 😁),

docker-compose.yml 這部份加上

......
  mailpit:
    image: axllent/mailpit
    restart: unless-stopped
    ports:
       - "8025:8025"
       - "1025:1025"
......

Django 需要修改設定 settings.py

# use mailpit
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "mailpit" # 對應 docker容器的 service
EMAIL_PORT = 1025 # 定義為 1025

然後再去 call api post /api/examples/send_email

然後 console log 就不會再像之前一樣顯示了, 現在會顯示在 http://127.0.0.1:8025/

alt tag

點進去也會有更詳細的資訊

alt tag

Django admin example

一般的 Django 操作完全可以正常使用, 像是這邊我們來撰寫 Django admin.py,

使用 formfield_overrides

@admin.register(Music)
class MusicAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.CharField: {
            "widget": forms.TextInput(attrs={"style": "width: 500px; height: 50px;"})
        },
    }

成功覆寫了 style ( 把它拉長拉寬了 )

alt tag

其他

執行環境

  • Python 3.12

  • VSCode

Reference

Releases

No releases published

Packages

No packages published

Languages