Esta serie de artículos se basa en la documentación del sitio web oficial de la versión 4.0 de Django, aprendiendo
usando herramientas de desarrollo para pycharm.
> python -m django --version
4.0
Directorio de artículos
Escribe tu primera aplicación Django, Parte 1
crear proyecto
Ejecutar en la ventana de terminal de pycharm
django-admin startproject mysite
Los siguientes archivos se generarán en el directorio de trabajo del proyecto actual
- El
mysite/
directorio raíz más externo es solo el contenedor del proyecto, y el nombre del directorio raíz no tiene efecto en Django, y se puede cambiar el nombre a cualquier nombre. manage.py
: una herramienta de línea de comandos que le permite administrar proyectos de Django de varias maneras.- El directorio de un nivel dentro
mysite/
contiene su proyecto, que es un paquete de python puro. mysite/__init__.py
: un archivo vacío que le dice a Python que este directorio debe considerarse un paquete de Python.mysite/settings.py
: El archivo de configuración para el proyecto django.mysite/urls.py
: La declaración de URL del proyecto django, al igual que el directorio de su sitio web.mysite/asgi.py
: sirve como punto de entrada para su proyecto que se ejecuta en un servidor web compatible con ASGI.mysite/wsgi.py
: como punto de entrada para su proyecto que se ejecuta en un servidor web compatible con WSGI.
Servidor simple para desarrollo.
Asegúrese de que su proyecto Django se haya creado realmente con éxito.
Vaya al directorio mysite/ más externo y ejecute:
> cd .\mysite\
> python manage.py runserver
Ver el siguiente resultado indica que el proyecto Django se creó con éxito, ctrl+c finaliza la operación y
se abre el navegador http://127.0.0.1:8000/
De forma predeterminada, el comando runserver configurará el servidor para escuchar en el puerto 8000 de la IP interna de la máquina.
Si se requieren cambios, ejecute
python manage.py runserver 8080
Vuelva a ejecutar y python manage.py runserver
verá que el enlace cambia ahttp://127.0.0.1:8080/
crear aplicación
Django viene con una herramienta que puede ayudarte a generar la estructura básica de directorios de la aplicación.
El nombre de la aplicación es arbitrario.
> python manage.py startapp polls
escribir la primera vista
encuestas/vistas.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello,world.You're at the polls index.")
Esta es la vista más simple en Django. Para ver el efecto, necesitamos asignarle una URL, por eso necesitamos URLconf.
Para crear una URLconf, se debe crear un nuevo archivo urls.py en el directorio de encuestas.
encuestas/urls.py
from django.urls import path
from . import views
urlpatterns=[
path('',views.index,name='index'),
]
El siguiente paso es especificar el módulo polls.urls que creamos en el archivo raíz URLconf. Inserte un include() en la lista de patrones de URL del archivo mysite/urls.py.
misitio/urls.py
from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
Verifica que esté funcionando
python manage.py runserver
http://127.0.0.1:8000/polls
Escribe tu primera aplicación Django, Parte 2
mysite/settings.py alguna configuración
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'#中文
#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'#中国时区
configuración de la base de datos
mysite/settings.py
La configuración predeterminada de Django de la base de datos sqlite3
'db.sqlite3'
almacenará el archivo de la base de datos en el directorio raíz del proyecto.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
Si configura la base de datos MySQL, primero debe ingresar a la interfaz de línea de comando MySQL para construir una base de datos para el proyecto, como:
create database xxx数据库名;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx数据库名',
'USER': '用户名',
'PASSWORD': '密码',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
crear modelo
El primer paso para escribir una aplicación web basada en una base de datos en Django es definir el modelo, es decir, el diseño del esquema de la base de datos y otros metadatos adjuntos.
El tutorial del sitio web oficial para crear una aplicación de encuestas es una aplicación de votación que crea dos modelos: Pregunta y Elección. El modelo de pregunta incluye una descripción de la pregunta y cuándo se publicó. El modelo Choice tiene dos campos, la descripción de la opción y el número actual de votos. Cada opción pertenece a una pregunta.
encuestas/modelos.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)#CharField字符字段
pub_date=models.DateTimeField('date published')#DateTimeField日期时间字段
class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)
modelo de activación
Primero, tenemos que instalar la aplicación de encuestas en nuestro proyecto y agregarla a la lista
mysite/settings.py INSTALLED_APPS'polls.apps.PollsConfig'
> python manage.py makemigrations polls
Migrations for 'polls':
polls\migrations\0001_initial.py
- Create model Question
- Create model Choice
Al ejecutar el comando makemigrations, Django detectará sus cambios en los archivos del modelo y almacenará los cambios como una migración.
Las migraciones son la forma en que Django almacena los cambios en las definiciones del modelo (es decir, la estructura de su base de datos). Se almacena en polls/migrations/0001_initial.py.
Vea qué sentencias SQL ejecutará el comando de migración. El comando sqlmigrate acepta un nombre de migración y devuelve el SQL correspondiente:
> python manage.py sqlmigrate polls 0001
Ejecute el comando de migración para crear una tabla de datos para el modelo recién definido en la base de datos:
> python manage.py migrate
La migración es una característica muy poderosa que le permite cambiar continuamente la estructura de la base de datos durante el desarrollo sin tener que eliminar y crear tablas nuevamente. Cambiar el modelo requiere estos tres pasos:
- Edite el archivo models.py y cambie el modelo.
- Ejecute python manage.py makemigrations para generar archivos de migración para cambios de modelo.
- Ejecute python manage.py migrate para aplicar migraciones de bases de datos.
API de prueba inicial
Abra la línea de comando de Python
python manage.py shell
Pruebe la API de la base de datos
>>> from polls.models import Choice,Question
>>> Question.objects.all()
<QuerySet []>
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.id
1
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2023, 3, 17, 7, 30, 17, 75596, tzinfo=datetime.timezone.utc)
>>> q.question_text="What's up?"
>>> q.save()
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
<Question: Question object (1)>
No nos ayuda a entender los detalles de este objeto. Solucione esto editando el código para el modelo de pregunta (ubicado en polls/models.py ). Agregue el método str () a Pregunta y Elección. Es muy importante agregar el método str
() al modelo , que no solo brinda comodidad para su uso en la línea de comando, sino que también usa este método para representar objetos en el administrador generado automáticamente por Django. Luego agregue un método personalizado a este modelo: polls/models.py
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)#CharField字符字段
pub_date=models.DateTimeField('date published')#DateTimeField日期时间字段
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)
def __str__(self):
return self.choice_text
quit()
Salga de la línea de comando. Abra de nuevo la línea de comandos interactivos de Python con python manage.py shell
el comando .
>>> from polls.models import Choice,Question
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>
>>> from django.utils import timezone
>>> current_year=timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>
>>> Question.objects.get(pk=1)
<Question: What's up?>
>>> q=Question.objects.get(pk=1)
>>> q.was_published_recently()
True
>>> q.choice_set.all()
<QuerySet []>
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
>>> c.question
<Question: What's up?>
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
>
>>> q.choice_set.count()
3
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
>
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
(1, {
'polls.Choice': 1})
quit() Salir.
Presentamos la página de administración de Django
Crear una python manage.py createsuperuser
contraseña de cuenta de administrador Escribí admin
> python manage.py createsuperuser
用户名 (leave blank to use 'dell'): admin
电子邮件地址: admin@example.com
Password:
Password (again):
密码跟 用户名 太相似了。
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
Inicie el servidor de desarrollo python manage.py runserver
, inicie http://127.0.0.1:8000/admin
sesión y agregue polls/admin.py
a la página de administración
from django.contrib import admin
from .models import Question
admin.site.register(Question)
Actualice la página
para experimentar la función de administración conveniente
y ver el historial de modificaciones