Last active
November 19, 2022 20:17
-
-
Save bayadeoro/6763655 to your computer and use it in GitHub Desktop.
Chuletas sobre django.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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