Django Tutorial for Beginners This is a brief tutorial for Django setup, only critical steps are noted, it aims serve as a quick reference when you want to setup a Django project or when yo forget some part of it.  For more detailed information, please see official tutorial 
Create a Project 
$ django-admin startproject [project name] 
 
Project Structure 1 2 3 4 5 6 7 mysite/     manage.py      mysite/         __init__.py (empty file, indicates it’s a package)          settings.py (configuration for this project)          urls.py (url declarations)          wsgi.py 
Run Server 
python manage.py runserver ([port]/[url:port]) 
 
Projects vs App 
App is a web application (blog system, database) 
Project is a collection of apps for a particular website 
Project can contains multiple apps, an app can be in multiple projects 
 
Create App 
python manage.py startapp [app name] 
 
App Structure
1 2 3 4 5 6 7 8 9 polls/     __init__.py      admin.py      apps.py      migrations/         __init__.py      models.py      tests.py      views.py 
Here, we should write the view part first  
Step 1:
Create urls.py in your app 
Map the url (in urls.py) 
Include that in project urls 
 
URL routing with parameters 
url(r’^delete_item/(?P\d+)$’, shared_todo_list.views.delete_item)  
 
Creating Models 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class PostModel (models.Model)      content  = models.CharField (max_length=100 )      id = models.AutoField (null=False, primary_key=True)      TYPE_CHOICE = (         ("IMG" , "image" ),         ("TEXT" , "text" ),     )     type = models.CharField (max_length=100 , choices=TYPE_CHOICE)      img  = models.ImageField (upload_to="grumblr/static/" , max_length=500 , blank=True)      author = models.ForeignKey (UserModel, default="" )      update_date = models.DateTimeField (auto_now=True)      create_date = models.DateTimeField (auto_now_add=True)      likes = models.IntegerField (default=0 )      dislikes = models.IntegerField (default=0 )      comments = models.ManyToManyField ("CommentModel" )  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class RegistrationForm (forms.Form)      username = forms.CharField (max_length=20 )      first_name = forms.CharField (max_length=20 )      last_name = forms.CharField (max_length=20 )      email = forms.CharField (max_length=40 , label='Email' )      password = forms.CharField(max_length=20 ,                                label='Password' ,                                widget=forms.PasswordInput ()      password_confirm = forms.CharField(max_length=20 ,                                        label='Confirm password' ,                                        widget=forms.PasswordInput ()      age = forms.IntegerField (label="Age" )      bio = forms.CharField (label="Short Bio" , max_length=200 )      avatar = forms.ImageField (required=False)      def clean (self)          cleaned_data = super (RegistrationForm, self) clean ()          username = cleaned_data.get ('username' )          password = cleaned_data.get ('password' )          password_confirm = cleaned_data.get ('password_confirm' )          if  password and password_confirm and password != password_confirm:             raise forms.ValidationError ("Passwords did not match." )          if  len (User.objects.filter(username=username) 0 :             raise forms.ValidationError ("User already exist" )  
1 2 3 4 5 6 7 8 9 form  = RegistrationForm (request.POST, request.FILES) if  form .is_valid ()     avatar = form .cleaned_data ['avatar' ]     new_user = User(username=form .cleaned_data ['username' ], last_name=form .cleaned_data ['last_name' ],                     first_name=form .cleaned_data ['first_name' ], email=form .cleaned_data ['email' ],                     password=form .cleaned_data ['password' ],                     avatar=avatar, bio=form .cleaned_data ['bio' ], age=form .cleaned_data ['age' ])     new_user.set_password (form.cleaned_data['password' ])      new_user.save ()  
Basic Template Usage 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 \ {\% extends  "profile_base.html"  %} \ {\% load  staticfiles  %} \ {\% block  headers  %}     <title > Follow</title >      <link  href ="\   {\% static  "css/bootstrap.min.css"  %} "  rel ="stylesheet" >    <link  href ="\   {\% static  "css/nav.css"  %} "  rel ="stylesheet" >    <link  href ="\   {\% static  "css/profile.css"  %} "  rel ="stylesheet" >    <link  href ="\   {\% static  "css/feed.css"  %} "  rel ="stylesheet" >    <link  href ="\   {\% static  "css/follow.css"  %} "  rel ="stylesheet" >    <script  src ="\   {\% static  "js/jquery-3.1.0.min.js"  %} " ></script >     <script  src ="\   {\% static  "js/bootstrap.min.js"  %} " ></script >     <script  src ="\   {\% static  "js/feed.js"  %} " ></script > \ {\% endblock  %} \ {\% block  content  %}     <ol  id ="follow-list" >          \ {\% for  u  in  data.list  %}             <li  class ="follow-item" >                  <div >                      <a  class ="follow-avatar-container"  href ="\   {\% url  'user ' user _id =u.id  %} " >                        \ {\% if u.avatar  %}                             <img  class ="follow-avatar"  src ="../../../" >                          \ {\% else  %}                             <img  class ="follow-avatar"  src ="\   {\% static  "img/avatar.jpg"  %} " >                        \ {\% endif  %}                     </a >                      <div  class ="follow-content-container" >                          <div  class ="follow-first-line" >                              <a  class ="follow-author"  href ="\   {\% url  'user ' user _id =u.id  %} " >                                </a >                          </div >                          <div  class ="follow-second-line" >                              <p  class ="feed-content-text" > Age:    Bio: </p >                          </div >                      </div >                  </div >              </li >          \ {\% endfor  %}     </ol >  \ {\% endblock  %}