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)