You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Create et access project folder~$ mkdirproject_name~$ cdproject_name# Create Python virtual env ~$ python3-mvenvvenv# Activate virtual env~$ sourcevenv/bin/activate# Deactivate virtual env~$ deactivate# If requirements already exist~$ pipinstall-rrequirements.txt# Freeze requirements in a file~$ pipfreeze>requirements.txt# Install django~$ pipinstalldjango~=3.1.0# New django project (from project_name folder)~$ django-adminstartprojectconfig .
# Create app (from project_name folder)~$ pythonmanage.pystartappapp_name# Migration~$ pythonmanage.pymakemigrations~$ pythonmanage.pymigrate# Create superuser~$ pythonmanage.pycreatesuperuser# Start server~$ pythonmanage.pyrunserver=>ex. http://127.0.0.1:8000# Current project shell example~$ pythonmanage.pyshell>>>fromapp_name.modelsimportUser>>>user1=User.objects.first()
# Prepare static folders fpor production
$ pythonmanage.pycollectstatic# Take all data from app blog and export in jsonpythonmanage.pydumpdatablog>myapp.json# Take all data in json file and import in app data tablepythonmanage.pyloaddatamyapp.json
# APP URLS # create urls.py in app_name folderfromdjango.urlsimportpathfrom . importviewsfromdjango.confimportsettingsfromdjango.conf.urls.staticimportstaticurlpatterns= [
path('posts', views.index, name='posts.index'),
path('posts/create/', views.create, name='posts.create',
path('posts/<int:id>/', views.show, name='posts.show'),
path('posts/<int:id>/edit/', views.edit, name='posts.edit'),
path('posts/<int:id>/delete/', views.delete, name='posts.delete'),
]
# URL Route ex. names conventionsposts.index|posts.create|posts.edit|posts.delete|posts.show# PROJECT URLS # Include the app urls into the project urls (project_name/urls.py) fromdjango.contribimportadminfromdjango.urlsimportpath, includeurlpatterns= [
path('admin/', admin.site.urls),
path('', include('app_name.urls'))
]
# Production Static routeurlpatterns+=static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Function Based Views
# views.pyfromdjango.shortcutsimportrender, redirectfrom .modelsimportPostfrom .formsimportPostFormdefindex(request):
# Get all Postsposts=Post.objects.all()
# Render app templatereturnrender(request, 'appfolder/index.html', {'posts': posts})
defshow(request, id):
post=Post.objects.get(id=id)
returnrender(request, 'appfolder/show.html', {'post': post})
defcreate(request):
form=PostForm(request.POSTorNone)
ifform.is_valid():
# optionally we can access form data with form.cleaned_data['first_name']form.save()
returnredirect('/posts')
returnrender(request, 'appfolder/create.html', {'form': form)
defedit(request, id):
post=Post.objects.get(id=id)
form=PostForm(request.POSTorNone, instance=post)
ifform.is_valid():
form.save()
returnredirect('/posts')
returnrender(request, 'appfolder/edit.html', {'form': form)
defdelete(request, id):
post=Post.objects.get(id=id)
post.delete()
returnredirect('/posts')
Class Based Views
fromdjango.views.genericimportTemplateView, ListView, DetailView, CreateView, UpdateView, DeleteViewclassLandingPageView(TemplateView):
template_name='landing.html'# change context data dictdefget_context_data(self, **kwargs):
context=super().get_context_data(**kwargs)
context['title'] ='Landing Page'returncontextclassPostsListView(ListView):
model=Post# or queryset=Post.objects.all()
# var name object_list (or post_list) will be available in template# context_object_name = "posts" to change object list var name# by default the view will open post/post_list.html but that can be changetemplate_name='posts/post_list.html'classPostsDetailView(DetailView):
model=Post# object var in template# by default the view will try to open post/post_detail.html template_name='posts/post_detail.html'classPostsCreateView(CreateView):
form_class=PostFormtemplate_name='posts/post_create.html'# default return is detail viewdefget_success_url(self):
returnreverse('posts-list')
# we can overwrite form datadefform_valid(self, form):
ifself.request.user.is_authenticated:
from.instance.author=self.request.userreturnsuper().form_valid(form)
classPostsUpdateView(UpdateView):
model=Postform_class=PostFormtemplate_name='posts/post_update.html'defget_success_url(self):
returnreverse('post-list')
# change context data dictdefget_context_data(self, **kwargs):
context=super().get_context_data(**kwargs)
context['submit_text'] ='Update'returncontextclassPostsDeleteView(DeleteView):
model=Posttemplate_name='posts/post_delete.html'success_url=reverse_lazy('posts-list')
# Urls.py route declarationpath('<int:pk>/update/', PostsUpdateView.as_view(), name='post-update')