cari

Django API Project Setup

Apa yang diharapkan daripada artikel ini?

Baiklah, mari mulakan pengekodan! ini adalah artikel pengekodan pertama selepas memperkenalkan idea Alive Diary dan membuktikan Gemini boleh menjadi jiwa, kami akan mula mengekod Backend dengan Django.
Untuk memastikan perkara itu teratur, saya akan membincangkan projek itu melalui berbilang artikel, jadi artikel ini

  • akan meliputi proses persediaan projek.
  • akan membentangkan perpustakaan yang digunakan dan sebab kami menggunakannya.
  • akan mencipta apl dan menerangkan logik di sebaliknya.

Saya akan cuba mengupas sebanyak mungkin butiran tanpa membosankan anda, tetapi saya masih mengharapkan anda membiasakan diri dengan beberapa aspek Python dan Django.

versi akhir kod sumber boleh didapati di https://github.com/saad4software/alive-diary-backend

Pesanan siri

Semak artikel sebelum ini jika berminat!

  1. Projek AI dari Scratch, The Idea, Alive Diary
  2. Buktikan ia boleh dilaksanakan dengan Google AI Studio
  3. Persediaan Projek API Django (Anda di sini ?)

Mulakan Projek!

Selepas memasang Python, dan menyediakan persekitaran maya yang sesuai dengan sistem pengendalian anda. pastikan anda memasang perpustakaan tersebut

Django==4.2.16          # it is django itself!
django-cors-headers==4.4.0  # avoid cors-headers issues
django-filter==24.3     # easily filter text fields 
djangorestframework==3.15.2 # rest framework!
djangorestframework-simplejwt==5.3.1    # JWT token
pillow==10.4.0          # for images
python-dotenv==1.0.1        # load config from .env file
google-generativeai==0.7.2  # google api
ipython==8.18.1         # process gemini responses
django-parler==2.3              # multiple languages support
django-parler-rest==2.2         # multi-language with restframework

keperluan.txt

Ia tidak semestinya versi yang sama, bergantung pada versi Python anda, anda boleh memasang setiap satu secara manual menggunakan

pip pasang django

atau buat fail keperluan dan gunakan fail lama yang sama

pip install -r requirements.txt

Dengan django dan perpustakaan dipasang, kami boleh memulakan projek kami

django-admin startproject alive_diary
cd alive_diary
python manage.py startapp app_account
python manage.py startapp app_admin
python manage.py startapp app_main

Kami mencipta projek yang dipanggil "alive_diary" dan di dalamnya, kami mencipta tiga aplikasi,

  • app_account: untuk mengurus data akaun penting pengguna, pendaftaran, log masuk, menukar kata laluan, mengesahkan e-mel akaun dan tanggungjawab yang serupa.
  • app_admin: untuk tugas berkaitan pentadbir, terutamanya mengurus pengguna untuk apl mudah ini
  • app_main: untuk apl utama.

Kami akan mengekalkan pergantungan minimum antara apl Django untuk menjadikannya boleh digunakan semula dalam projek lain.

tetapan

Ringkasnya, ini ialah fail tetapan terakhir, mari kita berjalan dengan pantas melaluinya

import os
from datetime import timedelta
from pathlib import Path
from dotenv import load_dotenv

Kami telah menggunakan timedelta daripada pakej datetime untuk menetapkan JWT seumur hidup, os dan load_dotenv untuk memuatkan pembolehubah daripada fail .env.

load_dotenv()

muat pembolehubah daripada fail .env

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = True
ALLOWED_HOSTS = ['*']

menambah '*' untuk ALLOWED_HOSTS untuk membenarkan sambungan dari mana-mana IP. os.getenv dapatkan nilai kunci daripada fail .env.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'django_filters',
    'app_account',
    'app_admin',
    'app_main',
]

Menambahkan corsheaders, rest_framework dan apl django_filters serta tiga apl kami, app_account, app_admin dan app_main.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Jangan lupa untuk menambah perkakas tengah CorsMiddleware sebelum CommonMiddleware

Django==4.2.16          # it is django itself!
django-cors-headers==4.4.0  # avoid cors-headers issues
django-filter==24.3     # easily filter text fields 
djangorestframework==3.15.2 # rest framework!
djangorestframework-simplejwt==5.3.1    # JWT token
pillow==10.4.0          # for images
python-dotenv==1.0.1        # load config from .env file
google-generativeai==0.7.2  # google api
ipython==8.18.1         # process gemini responses
django-parler==2.3              # multiple languages support
django-parler-rest==2.2         # multi-language with restframework

menambahkan konfigurasi pengepala cors pada fail tetapan

django-admin startproject alive_diary
cd alive_diary
python manage.py startapp app_account
python manage.py startapp app_admin
python manage.py startapp app_main

Gunakan Pengesahan JWT Mudah sebagai kelas pengesahan lalai untuk perpustakaan rangka kerja rehat.

import os
from datetime import timedelta
from pathlib import Path
from dotenv import load_dotenv

tukar kelas pengguna lalai kepada kelas tersuai daripada app_account, kami belum mencipta model ini lagi.

load_dotenv()

Menambahkan bahasa yang disokong dan tetapkan folder untuk fail dan statik

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = True
ALLOWED_HOSTS = ['*']

Tetapan e-mel, untuk proses pengesahan e-mel. kami sedang memuatkannya daripada fail .env.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'django_filters',
    'app_account',
    'app_admin',
    'app_main',
]

Tetapan token JWT yang mudah, kami menetapkan jangka hayat token akses "ACCESS_TOKEN_LIFETIME" menjadi 8 jam dan muat semula token sepanjang hayat "REFRESH_TOKEN_LIFETIME" menjadi 5 hari. kami sedang memutarkan token muat semula (menghantar token muat semula baharu dengan setiap permintaan token muat semula) "ROTATE_REFRESH_TOKENS" dan menggunakan awalan pengepala 'Pembawa' untuk pengesahan "AUTH_HEADER_TYPES".

Fail persekitaran

Vars yang digunakan dalam fail .env hendaklah

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

tetapkan nilai mengikut projek anda, anda boleh menggunakan kunci rahsia django yang dijana untuk Kunci Rahsia, dapatkan kunci API Google Gemini daripada studio AI dan gunakan akaun e-mel anda untuk e-mel pengesahan.
menggunakan akaun google untuk menghantar e-mel adalah mungkin, tetapi tidak disyorkan. tetapan hendaklah seperti

ROOT_URLCONF = 'alive_diary.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

WSGI_APPLICATION = 'alive_diary.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# CORS HEADERS
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

dan pengguna harus mendayakan "Apl yang kurang selamat" untuk mengakses akaun gmail. Bagaimanapun, kita boleh membina semuanya dahulu, dan bimbang tentang perkara ini kemudian. abaikan sahaja bahagian pengesahan e-mel buat masa ini.

buat kesimpulan

Hanya untuk dapat menjalankan projek dan menyelesaikan artikel ini, mari buat model pengguna dalam app_account/models.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

semudah itu! (kami akan mengusahakannya pada artikel seterusnya) mari berhijrah dan berhijrah

AUTH_USER_MODEL = 'app_account.User'

jika semuanya berjalan lancar, anda sepatutnya dapat menjalankan projek sekarang dengan

LANGUAGES = [
    ('en', 'English'),
    ('ar', 'Arabic')
]

STATICFILES_DIRS = [os.path.join(BASE_DIR, "app_main", "site_static")]
STATIC_ROOT = os.path.join(BASE_DIR, "app_main", "static")
MEDIA_ROOT = os.path.join(BASE_DIR, "app_main", "media")
MEDIA_URL = "/app_main/media/"

Sila kongsi sebarang isu yang anda hadapi dengan saya. Kami bersedia untuk mula bekerja pada apl projek sekarang!

Dan itu sahaja!

artikel seterusnya hendaklah merangkumi app_account, apl pengurusan pengguna, ia termasuk pengurusan pengguna, log masuk, daftar, tukar kata laluan, terlupa kata laluan, pengesahan akaun dan tindakan berkaitan pengguna lain yang kami perlukan dalam kebanyakan apl.

Nantikan ?

Atas ialah kandungan terperinci Persediaan Projek API Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail TeksCara Menggunakan Python untuk Mencari Pengagihan Zipf Fail TeksMar 05, 2025 am 09:58 AM

Tutorial ini menunjukkan cara menggunakan Python untuk memproses konsep statistik undang -undang ZIPF dan menunjukkan kecekapan membaca dan menyusun fail teks besar Python semasa memproses undang -undang. Anda mungkin tertanya -tanya apa maksud pengedaran ZIPF istilah. Untuk memahami istilah ini, kita perlu menentukan undang -undang Zipf. Jangan risau, saya akan cuba memudahkan arahan. Undang -undang Zipf Undang -undang Zipf hanya bermaksud: Dalam korpus bahasa semulajadi yang besar, kata -kata yang paling kerap berlaku muncul kira -kira dua kali lebih kerap sebagai kata -kata kerap kedua, tiga kali sebagai kata -kata kerap ketiga, empat kali sebagai kata -kata kerap keempat, dan sebagainya. Mari kita lihat contoh. Jika anda melihat corpus coklat dalam bahasa Inggeris Amerika, anda akan melihat bahawa perkataan yang paling kerap adalah "th

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Mar 10, 2025 pm 06:54 PM

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Mar 10, 2025 pm 06:52 PM

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

Serialization dan deserialisasi objek python: Bahagian 1Serialization dan deserialisasi objek python: Bahagian 1Mar 08, 2025 am 09:39 AM

Serialization dan deserialization objek Python adalah aspek utama dari mana-mana program bukan remeh. Jika anda menyimpan sesuatu ke fail python, anda melakukan siri objek dan deserialization jika anda membaca fail konfigurasi, atau jika anda menjawab permintaan HTTP. Dalam erti kata, siri dan deserialization adalah perkara yang paling membosankan di dunia. Siapa yang peduli dengan semua format dan protokol ini? Anda mahu berterusan atau mengalirkan beberapa objek python dan mengambilnya sepenuhnya pada masa yang akan datang. Ini adalah cara yang baik untuk melihat dunia pada tahap konseptual. Walau bagaimanapun, pada tahap praktikal, skim siri, format atau protokol yang anda pilih boleh menentukan kelajuan, keselamatan, kebebasan status penyelenggaraan, dan aspek lain dari program

Modul Matematik dalam Python: StatistikModul Matematik dalam Python: StatistikMar 09, 2025 am 11:40 AM

Modul Statistik Python menyediakan keupayaan analisis statistik data yang kuat untuk membantu kami dengan cepat memahami ciri -ciri keseluruhan data, seperti biostatistik dan analisis perniagaan. Daripada melihat titik data satu demi satu, cuma melihat statistik seperti min atau varians untuk menemui trend dan ciri dalam data asal yang mungkin diabaikan, dan membandingkan dataset besar dengan lebih mudah dan berkesan. Tutorial ini akan menjelaskan cara mengira min dan mengukur tahap penyebaran dataset. Kecuali dinyatakan sebaliknya, semua fungsi dalam modul ini menyokong pengiraan fungsi min () dan bukan hanya menjumlahkan purata. Nombor titik terapung juga boleh digunakan. Import secara rawak Statistik import dari fracti

Pengendalian ralat profesional dengan pythonPengendalian ralat profesional dengan pythonMar 04, 2025 am 10:58 AM

Dalam tutorial ini, anda akan belajar bagaimana menangani keadaan ralat di Python dari sudut pandang keseluruhan sistem. Pengendalian ralat adalah aspek kritikal reka bentuk, dan ia melintasi dari tahap terendah (kadang -kadang perkakasan) sepanjang jalan ke pengguna akhir. Jika y

Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka?Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka?Mar 21, 2025 pm 06:46 PM

Artikel ini membincangkan perpustakaan Python yang popular seperti Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask, dan Permintaan, memperincikan kegunaan mereka dalam pengkomputeran saintifik, analisis data, visualisasi, pembelajaran mesin, pembangunan web, dan h

Mengikis halaman web dalam python dengan sup yang indah: carian dan pengubahsuaian domMengikis halaman web dalam python dengan sup yang indah: carian dan pengubahsuaian domMar 08, 2025 am 10:36 AM

Tutorial ini dibina pada pengenalan sebelumnya kepada sup yang indah, memberi tumpuan kepada manipulasi DOM di luar navigasi pokok mudah. Kami akan meneroka kaedah dan teknik carian yang cekap untuk mengubahsuai struktur HTML. Satu kaedah carian dom biasa ialah Ex

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!