Tipo de presentación: Documento técnico en Markdown publicado en repositorio GitHub público.
Descargar Python desde: https://www.python.org/downloads/
Verificar instalación:
python --versionpython -m venv venvActivar entorno virtual (Windows):
venv\Scripts\activateSi todo está correcto, aparecerá (venv) en la terminal.
pip install django
pip install django-extensionsGuardar dependencias:
pip freeze > requirements.txt- Crear carpeta del proyecto (ej. ArticleManager).
- Abrir terminal dentro de esa carpeta.
django-admin startproject config .Archivos principales creados: - manage.py - Carpeta config/
En config/settings.py buscar DATABASES.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}DATABASES = {
'default': {
'ENGINE': 'mssql',
'NAME': 'nombre_db',
'USER': 'usuario',
'PASSWORD': 'password',
'HOST': 'localhost',
}
}python manage.py migratepython manage.py startapp articlesEn config/settings.py agregar en INSTALLED_APPS:
'articles',
'django_extensions',En articles/models.py:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
def __str__(self):
return self.titlepython manage.py makemigrations
python manage.py migrateproject/
├─ manage.py
├─ requirements.txt
├─ config/
│ ├─ settings.py
│ ├─ urls.py
│ ├─ wsgi.py
│ └─ asgi.py
└─ articles/
├─ models.py
├─ views.py
├─ forms.py
├─ urls.py
├─ scripts/
│ └─ populate_articles.py
├─ templates/
│ ├─ article_template.html
│ └─ article_form.html
└─ migrations/
Si se modifica modelo:
python manage.py makemigrations
python manage.py migrateCorrer servidor:
python manage.py runserverAbrir en navegador:
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all().order_by('-id')
return render(request, 'article_template.html', {'articles': articles})from django.urls import path
from . import views
urlpatterns = [
path('', views.article_list, name='article_list'),
]from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('articles.urls')),
]<h1>Lista de Artículos</h1>
<p><a href="/create/">Crear nuevo artículo</a></p>
{% for article in articles %}
<hr>
<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
{% empty %}
<p>No hay artículos todavía.</p>
{% endfor %}from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ['title', 'content']from django.shortcuts import render, redirect
from .forms import ArticleForm
def article_create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
form.save()
return redirect('article_list')
else:
form = ArticleForm()
return render(request, 'article_form.html', {'form': form})path('create/', views.article_create, name='article_create'),<h1>Nuevo Artículo</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Guardar</button>
</form>
<p><a href="/">Volver a la lista</a></p>python manage.py runscript populate_articles --script-args "articles/data/articles.csv"Con limpieza previa:
python manage.py runscript populate_articles --script-args "articles/data/articles.csv" "clear"Documento elaborado con fines académicos.