Skip to content

Instantly share code, notes, and snippets.

@bayadeoro
Last active November 19, 2022 20:17
Show Gist options
  • Select an option

  • Save bayadeoro/6763655 to your computer and use it in GitHub Desktop.

Select an option

Save bayadeoro/6763655 to your computer and use it in GitHub Desktop.
Chuletas sobre django.
He seguido el tutorial:
http://django.es/docs/intro/tutorial01/
- Para crear un proyecto:
$ django-admin.py startproject miprimerproyecto
- Para ejecutar el proyecto:
$ cd miprimerproyecto
$ python manage.py runserver 8080
- Abrimos un navegador he escribimos:
http://127.0.0.1:8080/
- Creamos un usuario de postgres:
https://gist.github.com/bayadeoro/6763556
- Configuramos la conexión a la bbdd en less mysites/mysites/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', #'mysql', 'sqlite3' or 'oracle'.
'NAME': 'polls', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': 'polls',
'PASSWORD': 'polls1234',
'HOST': 'localhost', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
- Creamos una aplicación:
$ python manage.py startapp polls
- Creamos el modelo de las tablas para esa aplicación (polls/models.py)
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
- Para no tener que escribir python delante de manage.py debemos darle
permisos de ejecucion:
$ chmod +x manage.py
- Para crear la definición de las tablas a partir del modelo, debemos agregar la aplicación al mysite/mysite/setting.py
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'mysite.polls'
)
- Y luego ejecutar:
$ ./manage.py sql polls
Nota: Esto no crea las tablas, solo muestra el comando para que nosotros lo ejecutemos.
- Si queremos que SÍ cree las tablas debemos ejecutar esto otro:
$ ./manage.py syncdb
- Una vez que insertemos datos podemos ver su contenido usando:
$ ./manage.py dbshell
polls => select * from Poll;
- Otra forma de hacerlo es importando el objet en la consola de python:
$ ./manage.py shell
>>> import polls.models
>>> polls.models.Poll.objects.all()
>>> polls.models.Poll.objects.all()
[]
>>> polls.models.Choice.objects.all()
[]
>>> quit()
Si te interesa, es posible ejecutar también los siguientes comandos:
$ ./manage.py validate polls -- Busca errores en la construcción de tus modelos.
Nota: Me da el siguiente error: CommandError: Command doesn't accept any arguments
$ ./manage.py sqlcustom polls -- Muestra las sentencias SQL definidas manualmente para la aplicación
Nota: No muestra nada porque no hemos creado tablas manualmente.
python manage.py sqlclear polls -- Muestra las sentencias DROP TABLE necesarias para esta aplicación, de acuerdo a las tablas que ya existen en la base de datos, si corresponde.
$ ./manage.py sqlclear polls
BEGIN;
DROP TABLE "polls_choice";
DROP TABLE "polls_poll";
COMMIT;
python manage.py sqlindexes polls -- Muestra la salida de las sentencias CREATE INDEX para esta aplicación.
./manage.py sqlindexes polls
BEGIN;
CREATE INDEX "polls_choice_poll_id" ON "polls_choice" ("poll_id");
COMMIT;
python manage.py sqlall polls -- Una combinación de todas las sentencias SQL de los comandos 'sql', 'sqlcustom', y 'sqlindexes'.
$ ./manage.py sqlall polls
BEGIN;
CREATE TABLE "polls_poll" (
"id" serial NOT NULL PRIMARY KEY,
"question" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
)
;
CREATE TABLE "polls_choice" (
"id" serial NOT NULL PRIMARY KEY,
"poll_id" integer NOT NULL REFERENCES "polls_poll" ("id") DEFERRABLE INITIALLY DEFERRED,
"choice" varchar(200) NOT NULL,
"votes" integer NOT NULL
)
;
CREATE INDEX "polls_choice_poll_id" ON "polls_choice" ("poll_id");
COMMIT;
- Jugando con la consola:
$ python manage.py shell
python: can't open file 'manage.py': [Errno 2] No such file or directory
bombadil@barbol:~/Proyectos$ cd miprimerproyecto/
bombadil@barbol:~/Proyectos/miprimerproyecto$ python manage.py shell
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from polls.models import Poll, Choice
>>> Poll.objects.all()
[]
>>> # Creamos una nueva encuesta
>>> from datetime import datetime
>>> p = Poll(question="Como estas?", pub_date=datetime.now())
>>> # Guardamos el objeto
>>> p.save()
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py:827: RuntimeWarning: DateTimeField received a naive datetime (2013-10-01 06:45:41.359604) while time zone support is active.
RuntimeWarning)
Para corregir este error debemos cambiar la zona horaria de chicago (que viene por defecto en mysite/mysite/setting.py)
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'Europe/Madrid'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'es-es'
- No es necesario cerrar la consola, volvemos a grabar los datos.
- Para que al hacer un Poll.objects.all() nos salgan los datos y no esto:
[<Poll: Poll object>]
Debemos definir en el modelo la funcion str:
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question
Así obtendremos el siguiente resultado:
>>> Poll.objects.all()
[<Poll: Como estas?>, <Poll: What's up?>]
# Ahora vamos a insertar datos en la otra tabla, que como esta relacionada, podemos usar el metodo create
# Demos a Poll un par de Choices. La llamda "create" crea
# un objeto choice nuevo, ejecuta la sentencia INSERT, agrega el
# objeto al conjunto de Choices disponibles y retorna el nuevo
# objeto Choice.
# Escogemos la encuentas que tenga como primary key el valor 1
>>> p = Poll.objects.get(pk=1)
# Le creamos unos valores para la tabla choice, que esta realacionada.
>>> p.choice_set.create(choice='Asi asi', votes=1)
<Choice: Asi asi>
>>> p.choice_set.create(choice='Estupendamente', votes=3)
<Choice: Estupendamente>
# Podemos ver los valores insertados.
>>> Choice.objects.all()
[<Choice: Asi asi>, <Choice: Estupendamente>]
# También podemos contar los registros:
>>> p.choice_set.count()
2
# Tambien podemos eliminar la opción Asi asi:
>>> c = p.choice_set.filter(choice__startswith='Asi')
>>> c.delete()
>>> p.choice_set.count()
1
>>> Choice.objects.all()
[<Choice: Estupendamente>]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment