Feature #878
Updated by Daniel Curtis about 9 years ago
{{>toc}}
This is a condensed version of the Django tutorial found "here":https://docs.djangoproject.com/en/1.10/intro/tutorial01/
h2. Setup The Environment
* Setup a python virtual environment to develop in
#* For Arch Linux use issue #876
#* For FreeBSD use issue #874
h2. Install Django
* Switch to the pydev user and activate the virtualenv:
<pre>
su - pydev
source ~/venv/new_app/bin/activate
</pre>
* And install Django:
<pre>
pip install Django
</pre>
h2. New Django App
* Create a new Django project:
<pre>
django-admin startproject www_example_com
cd www_example_com
</pre>
* Edit the project settings.py file:
<pre>
vi www_example_com/settings.py
</pre>
#* And add the host IP address of the local development machine:
<pre>
ALLOWED_HOSTS = ['192.168.1.90']
</pre>
* Test the new app by running the development test web server:
<pre>
./manage.py runserver 0.0.0.0:8000
</pre>
*NOTE*: Press @CTRL+C@ to stop the test web server
* Now create a new simple poll web application:
<pre>
./manage.py startapp polls
</pre>
h3. Create View
* Create the initial view:
<pre>
vi polls/views.py
</pre>
#* And add the following:
<pre>
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
</pre>
* Now map the view to a URL by creating:
<pre>
vi polls/urls.py
</pre>
#* And add the following:
<pre>
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
</pre>
* Next, point the root URLconf at the polls.urls module:
<pre>
vi www_example_com/urls.py
</pre>
#* And add the URL handler the @polls/@ part of the web application:
<pre>
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
</pre>
* Rerun the development test server:
<pre>
./manage.py runserver 0.0.0.0:8000
</pre>
#* And open a web browser and go to http://192.168.1.90/polls
*NOTE*: Press @CTRL+C@ to stop the test web server
h3. Connect to a Database
* Begin by initializing the database:
<pre>
./manage.py migrate
</pre>
h3. Create Model
* Create the data model file:
<pre>
vi polls/models.py
</pre>
#* And add the following to create two data models, *Question* and *Choice*:
<pre>
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
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
</pre>
* Edit the @www_example_com/settings.py@ file:
<pre>
vi www_example_com/settings.py
</pre>
#* And add the *@polls.apps.PollsConfig@* dotted path to the INSTALLED_APPS setting to include the app in our project:
<pre>
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
</pre>
* Now create the polls data model migrations to update the database structure:
<pre>
./manage.py makemigrations polls
</pre>
* Then apply the migration:
<pre>
./manage.py migrate
</pre>
h3. Admin Interface
* Create an admin user:
<pre>
./manage.py createsuperuser
</pre>
* Edit the admin file for the poll app:
<pre>
vi polls/admin.py
</pre>
#* And add the following to make the poll app modifiable in the admin interface
<pre>
from django.contrib import admin
from .models import Question
admin.site.register(Question)
</pre>
* Rerun the development test server:
<pre>
./manage.py runserver 0.0.0.0:8000
</pre>
#* And open a web browser and go to http://192.168.1.90/admin
*NOTE*: Press @CTRL+C@ to stop the test web server
h2. Resources
* https://docs.djangoproject.com/en/1.10/intro/tutorial01/