If you are Beginner or an intermediate Django developer u know that starting a new project in Django project is easy, nothing more than just couple of commands right? But at least for me I have to Duck it or check the previous project every time to get it right. For instance I always get trouble if it is createapp or createproject or startproject to start a Django project.
So here are some of the commands and snippets which you might find help full!. Note that these are not the steps to create a project nor are in particular order. Also you might not need all these steps in your project , so use only what you need.
1. Installing Virtual Env wrapper:
# For Linux and OS X : pip install virtualenvwrapper # For windows: pip install virtualenvwrapper-win
2. Creating, Enabling and Disabling Virtual Environment using wrapper :
# To create virtual env mkvirtualenv [virtual env name] # To enable virtual env workon [virtual env name] # To disable virtual env deactivate
3. Installing Django
pip install Django
4. Creating a Django Project:
Some may prefer giving project name as "config" at first so they get a project with settings.py and other core files inside "config app and afterwards renaming the project root directory to the project name.
django-admin startproject [project name]
5. Running in development server
# running on 127.0.0.1:8000 python manage.py runserver # running on a different port (eg. 127.0.0.1:7777) python manage.py runserver 7777 # running on a different ip (eg. 192.168.1.5:7777) python manage.py runserver 192.168.1.5:7777
6. Access Database shell
python manage.py dbshell
7. Access Django shell
python manage.py shell
8. Make Database Migration and Migrate
# Make migration python manage.py makemigrations # Migrate python manage.py migrate
9. Adding new App to the project:
- Run the following command to create an app
- Add your app name to the INSTALLED_APPS variable in settings.py
# create new app python manage.py startapp app_name # add app to settings.py INSTALLED_APPS = [ 'django...', . . 'app_name' ]
10. A simple view that return a web page
- define a function inside your app_name/view.py
from django.shortcuts import render def home(request): return render(request,'home.html') # make sure you have home.html configured properly
11. Configure urls for each app
- You can have separate urls.py file in each app to efficiently route your project.For which: create a file named urls.py inside your corresponding app and add it to the main urls.py (that resides along with your settings.py file )
inside newly created urls.py
from os import name from django.urls import path from . import views urlpatterns = [ path('__page_location__', views.function_name,name="name for the page"), # here it would be path('home', views.home,name="home")," ]
Add this url.py to the main urls.py (that resides along with settings.py)
main "urls.py"
from django.contrib import admin from django.urls import path from django.urls.conf import include urlpatterns = [ # path('admin/', admin.site.urls), path('app_name', include('app_name.urls')), ] # if you done properly you should see home page at http://127.0.0.1:8000/app_name/home
12. Adding Templates
- Create a Dir called templates(or anything you wish) inside project root Dir
- Update your TEMPLATES variable inside settings.py
# add your templates dir to DIRS in TEMPLATES variable. 'DIRS': [os.path.join(BASE_DIR,'templates')],
13. Configuring Static Dir
- Create a dir called "static" (or anything you wish) in the project root dir .
- Update setting.py by adding static dir to it.
# If you need a different name or location update it accordingly. you could add multiple dirs using ',' commas STATICFILES_DIRS = [ BASE_DIR / "static", ]
14. Loading static files inside html
- whenever you need to static files in your template , you need to call
{% load static %}
before hand ( note you need to call in every html(template) file that require static content.)
{% load static %}
- After that , you could load static file like ( here logo.png is the file located in the static dir. )
<img src="{% static 'logo.png' %}" alt="logo">
15. Similarly you could load your css file.
- create style/style.css inside static dir
- add this to your corresponding html template
{% load static %} <link rel="stylesheet" href="{% static 'style/style.css' %}">
16. Configuring Media files
- As you might know Django don't like to serving its media file , so this config also allows only media file access in development
- Create a dir called media in the project root dir
- Add config to settings.py and urls.py (that resides along with your settings.py file )
# in settings.py add the following MEDIA_ROOT =os.path.join(BASE_DIR,'media/') MEDIA_URL = '/media/' # in urls.py from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
17. A Simple Template Approach
- A simple approach for the Django app is to create a base html template that includes the basic tags and extend it to the other pages.
- here is a sample basic template
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PROJECT_NAME</title> {% load static %} <link rel="stylesheet" href="{% static 'style/style.css' %}"> </head> <body> {% block content %} {% endblock %} </body> </html>
And extent in another template for example home.html
{% extends 'base.html' %} {% block content %} <h1> this is home page </h1> {% endblock %}
18. Including templates
- If wish, you could include other templates to your main template. For instance you could create a template named nav_bar.html and include in every other templates ( here I have included it in home.html ).
nav_bar.html
<p> this is a nav bar. </p>
home.html
{% extends 'base.html' %} {% block content %} {% include 'navbar.html'%} <h1> this is home page </h1> {% endblock %}
19. Simple regex verification
- Warning: these are very basic regex. Do your own research before using regex.
import re email_regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9&]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+') zip_regex = re.compile(r'^[A-Za-z0-9\.\-\s]{3,10}$') password_regex = re.compile(r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-])[a-zA-Z0-9!@#$&*]{8,15}$') # To verify email = "someone@somewhere.com" if not re.fullmatch(email_regex,email): return "Invalid email"
20. CSRF for Api
- By default Django checks for csrf verification, so make sure you add
{% csrf_token %}
in your forms - And if you are manually send request using js you need to include the csrf token in your request.
# for forms: <form ... > {% csrf_token %} </form> # For manual request # this function return csrf token from cookie function getCookie(name) { let cookieValue = null; if (document.cookie && document.cookie !== '') { const cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i++) { const cookie = cookies[i].trim(); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } # inside your request options add csrf token in header var requestOptions = { method: 'POST', headers: {'X-CSRFToken': getCookie('csrftoken')}, body: formdata, mode: 'same-origin', redirect: 'follow' };
Top comments (0)