Difference between revisions of "Django"

From RHS Wiki
Jump to navigation Jump to search
Tag: visualeditor
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
==== Requirements: ====
+
=Django=
* Python
+
====Requirements:====
* Database (MySQL / PostgreSQL...)
 
  
==== Installation: ====  
+
*Python
 +
*Database (MySQL / PostgreSQL...)
 +
 
 +
====Installation:====  
 
  <nowiki>pip install django</nowiki>
 
  <nowiki>pip install django</nowiki>
  
==== Create project ====
+
====Create project====
 
  <nowiki>django-admin.py startproject mysite</nowiki>
 
  <nowiki>django-admin.py startproject mysite</nowiki>
  
==== Database Setup ====
+
====Database Setup====
 
Edit: mysite/settings.py
 
Edit: mysite/settings.py
  
In DATABASES = {...
+
In DATABASES = {...
* ENGINE – Either 'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', or 'django.db.backends.oracle'.
+
 
 +
*ENGINE – Either 'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', or 'django.db.backends.oracle'.
 
*NAME – The name of your database.
 
*NAME – The name of your database.
 
*USER – Username for the database.
 
*USER – Username for the database.
 
*PASSWORD – Password for the database.
 
*PASSWORD – Password for the database.
 
*HOST  – Database HOST.
 
*HOST  – Database HOST.
 +
 +
To create the database tables execute from the project folder:
 +
<nowiki>python manage.py migrate</nowiki>
 +
 +
(pip install MySQL-python)
 +
 +
====Run App in development server====
 +
If the server is an amazon aws:
 +
<nowiki>python manage.py runserver 0.0.0.0:8000 </nowiki>
 +
Else:
 +
<nowiki>python manage.py runserver</nowiki>
 +
 +
To run server as daemon:
 +
<nowiki>nohup python manage.py runserver 0.0.0.0:8000</nowiki>
 +
To stop the daemon:
 +
<nowiki>ps -ef | egrep python manage.py</nowiki>
 +
then kill process
 +
 +
====Create an app====
 +
<nowiki>python manage.py startapp appname</nowiki>
 +
 +
====Create admin user====
 +
python manage.py createsuperuser
 +
access at http://serverurl:8000/admin
 +
 +
====Usefull packages====
 +
=====Django Allouth=====
 +
[http://django-allauth.readthedocs.org/en/latest/showcase.html User Registration]<br />
 +
[http://www.sarahhagstrom.com/2013/09/the-missing-django-allauth-tutorial/ Allouth Tutorial]
 +
=====Django registration=====
 +
Not working in Django 1.7<br>
 +
[http://django-registration.readthedocs.org/en/latest/quickstart.html User registration]<br>
 +
[https://devdoodles.wordpress.com/2009/02/16/user-authentication-with-django-registration/ Django registration step by step]
 +
=CBV=
 +
==CSRF Exempt==
 +
<source lang="python">class ChromeLoginView(View):
 +
    @method_decorator(csrf_exempt)
 +
    def dispatch(self, request, *args, **kwargs):
 +
        return super(ChromeLoginView, self).dispatch(request, *args, **kwargs)
 +
 +
    def get(self, request):
 +
        return JsonResponse({'status': request.user.is_authenticated()})
 +
 +
    def post(self, request):
 +
        username = request.POST['username']
 +
        password = request.POST['password']
 +
        user = authenticate(username=username, password=password)
 +
        if user is not None:
 +
            if user.is_active:
 +
                login(request, user)
 +
                return JsonResponse({'status': True})
 +
        return JsonResponse({'status': False})</source>
 +
=Notes=
 +
==Templates==
 +
href="{% static 'cpc/css/tree.css' %}"
 +
href="{% url 'civilarea_history_create' task.id %}"
 +
===Change language template===
 +
<source lang="html+django"><form action="{% url 'set_language' %}" method="post">
 +
    {% csrf_token %}
 +
    <input name="next" type="hidden" value="{{ redirect_to }}" />
 +
    <select name="language">
 +
        {% get_language_info_list for LANGUAGES as languages %}
 +
        {% for language in languages %}
 +
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
 +
                {{ language.name_local }} ({{ language.code }})
 +
            </option>
 +
        {% endfor %}
 +
    </select>
 +
    <input type="submit" value="Go" />
 +
</form></source>
 +
 +
==Reset Migrations==
 +
 +
1) Fake migrations back to 0
 +
./manage.py migrate app zero --fake
 +
 +
2) Delete migrations files
 +
rm "app/migrations/*"
 +
 +
3) Create new migration file
 +
./manage.py makemigrations app
 +
 +
4) Pretend to run the new migration
 +
./manage.py migrate app --fake
 +
 +
==Check for connected signals listeners==
 +
  from django.db.models.signals import *
 +
  for signal in [pre_save, pre_init, pre_delete, post_save, post_delete, post_init]:
 +
      # print a List of connected listeners
 +
      print(signal.receivers)
 +
==Use Django ORM from python script==
 +
import os
 +
import django
 +
os.environ["DJANGO_SETTINGS_MODULE"] = 'project.settings'
 +
django.setup()
 +
from .models import
 +
or
 +
python manage.py shell < script.py

Latest revision as of 07:53, 27 March 2019

Django

Requirements:

  • Python
  • Database (MySQL / PostgreSQL...)

Installation:

pip install django

Create project

django-admin.py startproject mysite

Database Setup

Edit: mysite/settings.py

In DATABASES = {...

  • ENGINE – Either 'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', or 'django.db.backends.oracle'.
  • NAME – The name of your database.
  • USER – Username for the database.
  • PASSWORD – Password for the database.
  • HOST – Database HOST.

To create the database tables execute from the project folder:

python manage.py migrate

(pip install MySQL-python)

Run App in development server

If the server is an amazon aws:

python manage.py runserver 0.0.0.0:8000 

Else:

python manage.py runserver

To run server as daemon:

nohup python manage.py runserver 0.0.0.0:8000

To stop the daemon:

ps -ef | egrep python manage.py

then kill process

Create an app

python manage.py startapp appname

Create admin user

python manage.py createsuperuser access at http://serverurl:8000/admin

Usefull packages

Django Allouth

User Registration
Allouth Tutorial

Django registration

Not working in Django 1.7
User registration
Django registration step by step

CBV

CSRF Exempt

class ChromeLoginView(View):
    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(ChromeLoginView, self).dispatch(request, *args, **kwargs)

    def get(self, request):
        return JsonResponse({'status': request.user.is_authenticated()})

    def post(self, request):
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return JsonResponse({'status': True})
        return JsonResponse({'status': False})

Notes

Templates

href="{% static 'cpc/css/tree.css' %}"
href="{% url 'civilarea_history_create' task.id %}"

Change language template

<form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

Reset Migrations

1) Fake migrations back to 0

./manage.py migrate app zero --fake

2) Delete migrations files

rm "app/migrations/*"

3) Create new migration file

./manage.py makemigrations app

4) Pretend to run the new migration

./manage.py migrate app --fake

Check for connected signals listeners

 from django.db.models.signals import *
 for signal in [pre_save, pre_init, pre_delete, post_save, post_delete, post_init]:
     # print a List of connected listeners
     print(signal.receivers)

Use Django ORM from python script

import os
import django
os.environ["DJANGO_SETTINGS_MODULE"] = 'project.settings'
django.setup()
from .models import

or

python manage.py shell < script.py