Django

Source: djangoproject.com

= Installing =

Installation: sudo pip3 install django

Check installed version: python3 -m django --version

= Creating project = mkdir ~/mycode cd ~/mycode                  #Do not put code under /var/www django-admin startproject mysite

Avoid using names like django: conflict with Django itself test:  conflicts with a built-in Python package

Startproject command will create: mysite/ manage.py    mysite/ __init__.py        settings.py         urls.py         wsgi.py

These files are:
 * The outer mysite/: Just a container for the project. It can be renamed it to anything.
 * manage.py: Command-line utility that allows to interact with this Django project in various ways.
 * The inner mysite/ directory is the actual Python package for the project. This is the Python package name to use to import anything inside it (e.g. mysite.urls).
 * mysite/__init__.py: Empty file that tells Python that this directory should be considered a Python package.
 * mysite/settings.py: Settings/configuration for this Django project.
 * mysite/urls.py: The URL declarations for this Django project; a “table of contents” of your Django-powered site.
 * mysite/wsgi.py: An entry-point for WSGI-compatible web servers to serve your project.

= Running Project =

cd ~/mycode/mysite/ python3 manage.py runserver http://127.0.0.1:8000/

Changing the port python3 manage.py runserver 8080

Listen on all available public IPs: python3 manage.py runserver 0:8000 python3 manage.py runserver 0.0.0.0:8000

Automatic reloading of runserver: The server automatically reloads Python code for each request as needed. No need to restart the server for code changes to take effect. Some actions like adding files don’t trigger a restart, need to restart the server in these cases.

Invalid http_host Header error: Need to add 198.211.99.20 to ALLOWED_HOSTS setting in project settings.py file cd ~/mycode/mysite/mysite nano settings.py ALLOWED_HOSTS = ['198.211.99.20', 'localhost', '127.0.0.1']

= Creating an App =


 * This is the simplest view possible in Django.
 * Edit the /mytool/myapp/views.py file:


 * To call the view, we need to map it to a URL - and for this we need a URLconf.
 * To create a URLconf in the polls directory, create a file called urls.py.
 * Create the /mytool/myapp/urls.py file:


 * The next step is to point the root URLconf at the myapp.urls module.
 * In mytool/urls.py, add an import for django.urls.include and insert an include in the urlpatterns list,
 * Edit the /mytool/mytool/urls.py file and modify it to look like this:

Test the site: http://10.140.197.8:8080/myapp/

= Understanding Parameters =

two required: route and view two optional: kwargs, and name.
 * The path function is passed four arguments,

Route is a string that contains a URL pattern. When processing a request, Django starts at the first pattern in urlpatterns and makes its way down the list, comparing the requested URL against each pattern until it finds one that matches. Patterns don’t search GET and POST parameters, or the domain name. For example, in a request to https://www.example.com/myapp/, the URLconf will look for myapp/. In a request to https://www.example.com/myapp/?page=3, the URLconf will also look for myapp/.
 * Route:

When Django finds a matching pattern, it calls the specified view function with an HttpRequest object as the first argument and any “captured” values from the route as keyword arguments.
 * View:

Arbitrary keyword arguments can be passed in a dictionary to the target view.
 * Kwargs:

Naming your URL lets you refer to it unambiguously from elsewhere in Django, especially from within templates. This powerful feature allows you to make global changes to the URL patterns of your project while only touching a single file.
 * Name:

= Using Database =

= Deploy Django project = Source: tutorialspoint.com

cd ~ django-admin startproject myproject cd myproject python3 manage.py startapp myapp python3 manage.py migrate python3 manage.py createsuperuser

nano myproject/urls.py from django.conf.urls import include, url

from django.contrib import admin admin.autodiscover

urlpatterns=[ url(r'^admin/', admin.site.urls), ]

python3 manage.py runserver 0.0.0.0:8000 http://10.79.111.191:8000/admin/

cd ~/myproject/myapp/ nano views.py from django.http import HttpResponse
 * Create Views:

def hello(request): text = " welcome to my app number " return HttpResponse(text)

nano ~/myproject/myproject/urls.py
 * URL Mapping:

from myapp.views import hello

urlpatterns=[ url(r'^admin/', admin.site.urls), url(r'^hello/', hello, name = 'hello'), ]

Test Page: http://10.79.111.191:8000/hello/


 * Organizing Your URLs

nano ~/myproject/myproject/urls.py

Delete below lines:

from django.conf.urls import include, url from myapp.views import hello

urlpatterns=[ url(r'^admin/', admin.site.urls), url(r'^hello/', hello, name = 'hello'), ]

Add below lines: from django.contrib import admin from django.urls import include, path from myapp import urls

urlpatterns = [ path('admin/', admin.site.urls), path(r'^myapp/', include('myapp.urls')), ]

Create a new urls.py file for the App and paste above lines: cd ~/myproject/myapp/ nano urls.py

from django.conf.urls import include, url from myapp.views import hello

from django.contrib import admin admin.autodiscover

urlpatterns=[ url(r'^admin/', admin.site.urls), url(r'^hello/', hello, name = 'hello'), ]


 * References