Django
Apžvalga
Django yra aukšto lygio Python žiniatinklio karkasas, skatinantis greitą kūrimą ir švarų, pragmatišką dizainą. Jis turi įmontuotą ORM, administravimo skydelį, autentifikavimo sistemą ir šablonų variklį.
Greitas startas
Sukurkite repozitoriją iš šablono
Valdymo skydelyje pereikite į skirtuką Tools & Deployment. Spauskite mygtuką "New Repository", išskleidžiamame sąraše pasirinkite Django šabloną, įveskite repozitorijos pavadinimą ir subdomeną, tada spauskite "Create Repository".
Klonuokite savo repozitoriją
git clone https://<git-server>/<username>/<repo-name>.git
cd <repo-name>
Įdiekite priklausomybes
pip install -r requirements.txt
Sukonfigūruokite duomenų bazę ir paleiskite migracijas
Atnaujinkite duomenų bazės nustatymus settings.py faile (žr. „Duomenų bazės konfigūracija" žemiau), tada paleiskite:
python manage.py migrate
python manage.py runserver
Pagal numatytuosius nustatymus serveris veikia adresu http://localhost:8000.
Įkelkite savo pakeitimus
git add .
git commit -m "Initial setup"
git push origin main
Vietinis kūrimas su Docker
Jei vietoje neturite įdiegto Python, galite naudoti Docker savo Django aplikacijai paleisti.
Komandų vykdymas su Docker
# Įdiegti priklausomybes
docker run --rm -v $(pwd):/app -w /app python:3.12 pip install -r requirements.txt
# Paleisti kūrimo serverį
docker run --rm -v $(pwd):/app -w /app -p 8000:8000 python:3.12 sh -c "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:8000"
Duomenų bazės konfigūracija
NStrim platforma jums suteikia MySQL/MariaDB duomenų bazę. Atnaujinkite DATABASES nustatymą savo settings.py faile.
Atnaujinkite settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<username>',
'USER': '<username>',
'PASSWORD': '<password>',
'HOST': 'db.<session-domain>',
'PORT': '3306',
}
}
student01). Tikslioms reikšmėms patikrinkite valdymo skydelio prisijungimo duomenų skiltį.Projekto struktūra
├── project/
│ ├── settings.py # Projekto konfigūracija
│ ├── urls.py # Šaknies URL konfigūracija
│ └── wsgi.py # WSGI įėjimo taškas
├── app/
│ ├── models.py # Duomenų bazės modeliai
│ ├── views.py # Rodinio funkcijos / klasės
│ ├── urls.py # Aplikacijos URL šablonai
│ ├── serializers.py # DRF serializeriai
│ ├── admin.py # Admin skydelio konfigūracija
│ └── templates/ # HTML šablonai
├── static/ # CSS, JS, paveikslėliai
├── manage.py # Django valdymo CLI
├── requirements.txt # Python priklausomybės
└── Dockerfile # Docker konfigūracija
Įprastos užduotys
Modelio kūrimas
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(unique=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
Rodinio kūrimas
from django.http import JsonResponse
from .models import User
def user_list(request):
users = list(User.objects.values('id', 'name', 'email'))
return JsonResponse(users, safe=False)
URL konfigūracija
from django.urls import path
from . import views
urlpatterns = [
path('users/', views.user_list, name='user-list'),
]
Naudingos komandos
python manage.py runserver
Paleisti kūrimo serverį
python manage.py migrate
Vykdyti duomenų bazės migracijas
python manage.py makemigrations
Sukurti naujas migracijas iš modelio pakeitimų
python manage.py createsuperuser
Sukurti administratorių /admin skydeliui
python manage.py shell
Interaktyvi Python terpė su Django
Trikčių šalinimas
OperationalError: (2002) Can't connect to MySQL server
Priežastis: Duomenų bazės serveris yra neteisingas arba nepasiekiamas.
Sprendimas: Patikrinkite, ar HOST DATABASES nustatyme sutampa su valdymo skydelio duomenų bazės serveriu.
OperationalError: (1045) Access denied for user
Priežastis: Neteisingas vartotojo vardas arba slaptažodis.
Sprendimas: Du kartus patikrinkite, ar USER ir PASSWORD jūsų settings.py faile tiksliai atitinka valdymo skydelio prisijungimo duomenis.
No module named 'MySQLdb'
Sprendimas: Įdiekite MySQL klientą: pip install mysqlclient. macOS sistemoje taip pat gali prireikti: brew install mysql-client.
DisallowedHost: Invalid HTTP_HOST header
Sprendimas: Pridėkite savo diegimo domeną į ALLOWED_HOSTS settings.py faile: ALLOWED_HOSTS = ['*']