Django
Revision as of 07:49, 27 March 2019 by Rafahsolis (talk | contribs)
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