djangoproject/first_django_app.md

2.1 KiB
Raw Blame History

First Django App

Target: create a basic poll application, with 2 parts a public site and a admin site

  • public site: let's pp view polls and vote
  • admin site: let's you(admin) add/change/delete poll

Creating a project

In the source directory, create project by

$ django-admin startproject <project_name>

Constraint on <project_name>:

  • don't use names that conflict with django
    • e.g. django, test (test with built-in test file)
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Explain file structure:

  • top-level mysite/: container of the project, can be renamed latter w/o affect Django framework
  • manage.py: cmd-line utility let us to interact (admin) with Django projects.
  • inner mysite/ dir: actual Python package for the project.
    • Importing any package from here: e.g. mysite.urls
  • mysite/__init__.py: empty file, tell python start from here.
  • mysite/settings.py: settings/config for this django project.
  • mysite/urls.py: URL declarations for this Django pjt; a "table of contents" of this Django website.
  • mysite/asgi.py: An entry-point for ASGI-compatible webservers
  • mysite/wsgi.py: Entry-point for WSGI-compatible webservers

The development server

Start server steps:

  1. cd into outer mysite/ dir
  2. Start server via: python manage.py runserver

Outcome:

  • A development server is started. So no need to config a production server (e.g. Apache)
  • Note: don't use it as production environment.

Creating the Polls app

Projects vs. apps

Whats the difference between a project and an app? An app is a Web application that does something e.g., a Weblog system, a database of public records or a small poll app. A project is a collection of configuration and apps for a particular website. A project can contain multiple apps. An app can be in multiple projects.

Create a poll app along mysite/. For what?

$ python manage.py startapp polls

app hierarchy

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py