Skip to content

Instantly share code, notes, and snippets.

@weihong0827
Last active January 7, 2021 09:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save weihong0827/c4eee39b5b0e1766850e780c0ce5527f to your computer and use it in GitHub Desktop.
Save weihong0827/c4eee39b5b0e1766850e780c0ce5527f to your computer and use it in GitHub Desktop.
Django Workshop.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Django Workshop.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyO/lovy2NFDnge38FpNYpl8",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/weihong0827/c4eee39b5b0e1766850e780c0ce5527f/django-workshop.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0IDeW7qn23x4"
},
"source": [
"#Web Development\n",
"**Backend development**\n",
"\n",
"The backend or server-side of the website takes care of data storage and management. It sends and receives data from the front-end side of the website and process it such that the front-end display the desired information.\n",
"\n",
"Eg: Login page\n",
"- input username and password at the front-end\n",
"- This data is packaged and sent to the backend\n",
"- The backend scripts validates the data\n",
"- If the username and password is correct\n",
"- That specific user's information is sent to the front-end\n",
"- Front-end then takes in all these information and render the specific user's page\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "O8DDr7536-sr"
},
"source": [
"#Django\n",
"\n",
"Why Django?\n",
"- Its based on python\n",
"- Simple syntax\n",
"- Its own web server\n",
"- MVC (Model-View-Controller) core architecture\n",
"\n",
"Let's get started!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c8JTPz5a8z6N"
},
"source": [
"#Open up terminal in your machine\n",
"- Command Prompt or Anaconda Prompt for windows user\n",
"- Create a folder in the desired place that you wish to store this project\n",
"- You can create the folder using <code>mkdir folder_name</code> or just right click and create new folder\n",
"- use <code>cd path/to/your/folder</code> to get to the folder\n",
"\n",
"\n",
"#Create an virtual environment\n",
"\n",
"This is for better package management\n",
"\n",
"<code>python3 -m venv env</code> or \n",
"<code>python -m venv env</code>\n",
"\n",
"On Windows, run:\n",
"\n",
"<code>env\\Scripts\\activate.bat</code>\n",
"\n",
"On Unix or MacOS, run:\n",
"\n",
"<code>source env/bin/activate</code>\n",
"\n",
"#installing the packages we need\n",
"\n",
"<code>pip install Django==3.1.4</code>\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JQWYBogtCLil"
},
"source": [
"#Get started with the actual project\n",
"\n",
"start a new django project\n",
"\n",
"<code>django-admin startproject first_django</code>\n",
"\n",
"get into the project folder by:\n",
"\n",
"<code>cd first_django</code>\n",
"\n",
"You shold see another first_django folder with a mange.py file\n",
"\n",
"Now run <code>python mange.py runserver</code>\n",
"\n",
"It should give you a [url](http://127.0.0.1:8000/) for you to go to.\n",
"Open your webbrowser, key in the url and this is what you should see.\n",
"\n",
"![Screenshot 2020-12-29 141134.png](data:image/png;base64,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aKj97szWZgkHAAAAAABw5uCWCgAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA4HMkHAAAAAAAgM+RcAAAAAAAAD5HwgEAAAAAAPgcCQcAAAAAAOBzJBwAAAAAAIDPkXAAAAAAAAA+R8IBAAAAAAD4HAkHAAAAAADgcyQcAAAAAACAz5FwAAAAAAAAPkfCAQAAAAAA+BwJBwAAAAAA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)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Oczzt5yzG_Fx"
},
"source": [
"#Use of a text editor\n",
"- Here are some of the recommendations\n",
"- [Visual Studio Code](https://code.visualstudio.com/download)\n",
"- [Sublime Text](https://www.sublimetext.com/3)\n",
"- [PyCharm](https://www.jetbrains.com/pycharm/download)\n",
"\n",
"Open the folder using the text editor"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FNfEW_mlKFeK"
},
"source": [
"#Settings.py\n",
"\n",
"This is the fundamental configurations of your django project\n",
"\n",
"<code>BASE_DIR </code>gives directory to this django project\n",
"\n",
"<code>SECRET_KEY</code>is the unique key for your django project, protect it well because it may lead to security flaws\n",
"\n",
"<code>DEBUG</code> It is a useful feature when you are in the developing phase, change it to false when you are ready to deploy the website\n",
"\n",
"<code>ALLOWED_HOSTS</code>Store all the domain name allowed to use the project. \n",
"\n",
"<code>INSTALLED_APPS</code>This holds the names of all Django applications that are activated in this Django instance. Apps can be used in multiple projects, and you can package and distribute them for use by others in their projects. \n",
"\n",
"<code>MIDDLEWARE</code> This is all the security features and how your requests of the website is handled\n",
"\n",
"<code>ROOT_URLCONF</code> This is to tell the django project how to route your website\n",
"\n",
"<code>TEMPLATES</code> This is where the html templates that django is going to render\n",
"\n",
"<code>WSGI_APPLICATION</code> This is how your server works and sometimes you will need to change it sometimes you dont\n",
"\n",
"<code>DATABASES</code> This is the database that django project used. By default is sqlite3.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ri6bUuyIFmz6"
},
"source": [
"#Let's start play with it!\n",
"\n",
"Run <code>python manage.py migrate</code> in your terminal.\n",
"\n",
"This commnand checks through you installed apps and create the necesary database tables\n",
"\n",
"Then run <code> python mange.py createsupreuser</code> to create a super user to login to the admin page\n",
"\n",
"Run <code>python mange.py runserver</code>\n",
"\n",
"Then go to http://127.0.0.1:8000/admin\n",
"\n",
"Key in the username and password that you have just now and you will get into the admin page\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OGbz3GS7KNwF"
},
"source": [
"#Create your first app\n",
"\n",
"It is not the app on your phone but more like a component or functionality of your django project\n",
"\n",
"In your terminal, make sure that you are in the project folder which contains the mange.py file.\n",
"\n",
"Run <code>python manage.py startapp your_app_name</code>\n",
"\n",
"Let's say in this case, I want to build an ecommerce platform. I will run <code>python manage.py startapp products</code>\n",
"\n",
"You will now see that a new folder with the name of your app is created\n",
"\n",
"You can create multiple apps, but one app should be dedicated to one function and do that function really well.\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "B0P_H7J4WzHj"
},
"source": [
"#Creating models\n",
"\n",
"Models contains the essential fields and behaviors of the data that you are storing.\n",
"\n",
"In your app folder, you will see a models.py\n",
"\n",
"In models.py, I will create a new class called Product which stores all the essential data that a product should have.\n",
"\n",
"The Code below and fieldtypes are just an example.\n",
"\n",
"More field types can be found [here](https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.AutoField)\n",
"\n",
"If you want to add more fields afterwards. makemigrations will sync the database with the model that you have but for older records in the database without these new fields you will need a default value for the older records\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "BMDqPBqpYSvH"
},
"source": [
"#This is your models.py\n",
"from django.db import models\n",
"\n",
"class Product(models.Model):\n",
"\n",
" title = models.CharField(max_length=120)\n",
" description = models.TextField()\n",
" price = models.DecimalField(decimal_places=2,max_digits=10000)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "R2Aoc8TZaACq"
},
"source": [
"#'Install' your app\n",
"\n",
"After creating the models for your app\n",
"\n",
"You can add your app to the project by going to the settings.py\n",
"\n",
"In the <code>INSTALLED_APPS</code> add your app name to it.\n",
"\n",
"Save all your edited files.\n",
"\n",
"In the terminal, run <code>python manage.py makemigrations</code>\n",
"\n",
"Then, <code>python manage.py migrate</code>\n",
"\n",
"***You should run these two commands together every time you make changes to your models.py***\n",
"\n",
"makemigration checks and updates the changes that you have made to the model, while migrate takes these changes and updates the database format"
]
},
{
"cell_type": "code",
"metadata": {
"id": "i2yvHEmYabAG"
},
"source": [
"#Your settings.py\n",
"INSTALLED_APPS = [\n",
" 'django.contrib.admin',\n",
" 'django.contrib.auth',\n",
" 'django.contrib.contenttypes',\n",
" 'django.contrib.sessions',\n",
" 'django.contrib.messages',\n",
" 'django.contrib.staticfiles',\n",
" 'product',\n",
"]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "ckDoPK_kbTw2"
},
"source": [
"#Registering the model with admin\n",
"\n",
"In order to view your model in the admin site.\n",
"\n",
"Go to the admin.py file under the app folder\n",
"\n",
"Import the model that you have made and register it\n",
"\n",
"After registering, run <code>python manage.py runserver</code> and go to the admin site and you should see your newly created models there"
]
},
{
"cell_type": "code",
"metadata": {
"id": "gwgY9MjPdHSW"
},
"source": [
"#Your admin.py\n",
"\n",
"from django.contrib import admin\n",
"from .models import Product\n",
"\n",
"admin.site.register(Product)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "jw29ql1Xr-7u"
},
"source": [
"#Adding deleting and formatting Data\n",
"\n",
"If you want to add data to the database\n",
"\n",
"You can create the data base record using <code>Product.objects.create(title='',des = '',price =0.0)</code> In the django shell\n",
"\n",
"You can open django shell in terminal using <code>python manage.py shell</code>\n",
"\n",
"You can also write a class method to add data.\n",
"\n",
"After you have the code below in your models.py, you can open up django shell.\n",
"\n",
"Enter <code>from products.models import Product</code> to import the model\n",
"\n",
"Then call the class function by <code>Product._create_data()</code> to create the data automatically.\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "b7tFxgOnvUu0"
},
"source": [
"#Your updated models.py\n",
"class Product(models.Model):\n",
" title = models.CharField(max_length=120)\n",
" description = models.TextField()\n",
" price = models.DecimalField(decimal_places=2,max_digits=100)\n",
"\n",
" def __str__(self):#This function changes how the data is presented. You change view the change when you see it in the admin site\n",
" return '{}{}'.format(title,price)\n",
" @classmethod\n",
" def _delete_data(cls):#this function deletes all the data\n",
" Product.objects.all().delete()\n",
" \n",
" @classmethod\n",
" def _create_data(cls,count = 1000):\n",
" for i in range (count):\n",
" Product.objects.create(title='title'+str(i),description = 'This is the description for title'+str(i),price=count)\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "bK85um5n2AfC"
},
"source": [
"#Creating the first webpage\n",
"\n",
"For websites, we definitely need a lot of different pages for users to go to.\n",
"- profile\n",
"- home\n",
"- social\n",
"- contact\n",
"\n",
"How do we do that?\n",
"\n",
"we render these pages in the **views.py** of your app.\n",
"\n",
"In your **views.py** you should define a function of how the specific page should be rendered.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Ttz2u3uq7BLu"
},
"source": [
"# This is your models.py\n",
"\n",
"from django.shortcuts import render\n",
"from django.http import HttpResponse\n",
"# Create your views here.\n",
" \n",
"def home_screen(request):\n",
" return HttpResponse('<h1>Hello World</h1')\n",
"\n",
"def contact_page(request):\n",
" return HttpResponse('<h1>This is the contact page</h1>')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "R6rF5PmW7Dd4"
},
"source": [
"After you have define the function, you need to go to the **urls.py** in you project folder.\n",
"\n",
"This **urls.py** takes care of all the requests and routing of the webiste.\n",
"\n",
"Import your home_screen and contact_page function that you have defined earlier into this **urls.py**\n",
"\n",
"define the url path and call the function\n",
"\n",
"Now go to [home](https://127.0.0.1:800) and [contact](https://127.0.0.1:800/contact) page to take a look (remember to run the server before you go to the webpage)\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "sLNYmaH_7Hs4"
},
"source": [
"#This is your urls.py\n",
"\n",
"from django.contrib import admin\n",
"from django.urls import path\n",
"from products.views import home_screen,contact_page\n",
"urlpatterns = [\n",
" path('',home_screen),\n",
" path('contact/',contact_page),\n",
" path('admin/', admin.site.urls),\n",
"]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "B3PQGN1it7zr"
},
"source": [
"#Django Templating engine\n",
"\n",
"You would not want to return entire webpage as an http response.\n",
"\n",
"We can make use of the Django Templating Engine to help us render a html out as a response to the http request\n",
"\n",
"In order to do that, we use the <code>render</code> function that is already imported for you by default in the views.py\n",
"\n",
"The following code will explain to you how to use it\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Vvuejq-uvCHT"
},
"source": [
"from django.shortcuts import render\n",
"\n",
"def home_screen(request):\n",
" return render(request,'home.html',{})\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "fHebHeRdvAsk"
},
"source": [
"#Explaination\n",
"\n",
"All in all you just have to return the render function with the 3 parameters.\n",
"\n",
"The request that is past by the urls.py, the 'home.html' which is the html template that you wish to output. Lastly, a dictionary, containing the data that you want to pass to the html to be rendered.\n",
"\n",
"The ability to pass data to html page to be rendered is essentially what makes the templating interesting. You just need a general design of the website and just fill the blanks in with data.\n",
"\n",
"Where do we put the html templates?\n",
"\n",
"Create a templates folder in the root directory of the django project. And then dump all your templates that you want to use inside.\n",
"\n",
"For Django to know where this folder is, go back the the settings.py and add <code>os.path.join(BASE_DIR,'templates')</code> in your DIRS list under the TEMPLATES\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-4YeDJrU0Adb"
},
"source": [
"#How should you write your html\n",
"\n",
"Because we want to render data using django, we cannot just write the html like how we usually do.\n",
"\n",
"When we want to access the key and value pair in the dictionary we just simply use {{key}} \n",
"\n",
"If the value is a list then we can use a for loop to loop through the content in the list and display them\n",
"\n",
"There django also allow you to use if else statement to perform condition checks.\n",
"\n",
"More about the django template tags can be found [here](https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#for)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "4tRH4-0Vh1pX"
},
"source": [
"#This is your views.py\n",
"def home_screen(request):\n",
" data = { #This is the setof data that i want to pass to the html page\n",
" 'user':'qiuweihong',\n",
" 'age':21,\n",
" 'telegram':'@iceridge',\n",
" 'myfifthrow':['3dc','badminton','photog']\n",
" }\n",
"\n",
" return render(request,'home.html',data)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Er7VHG7giRZW"
},
"source": [
"#This is your home.html\n",
"<h1>Hello Word</h1>\n",
"\n",
"<p>This is {{user}}</p>\n",
"<p>I am {{age}} years old</p>\n",
"<p>My telegram is {{telegram}}</p>\n",
"My Fifth Rows are:\n",
"<ul>\n",
" \n",
" {% for fifthrow in myfifthrow%}\n",
" {%if fifthrow == \"3dc\" %}\n",
" <li style=\"font-weight:bold;\">{{fifthrow}}</li>\n",
" {%else%}\n",
" <li>{{fifthrow}}</li>\n",
" {% endif %}\n",
" {%endfor%}\n",
"</ul>"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "KJq9twI9iZRi"
},
"source": [
"#Getting data from the data base\n",
"\n",
"Now we are still hard coding the data, but for backend we wannt to make full use of the data base\n",
"\n",
"What we need to do:\n",
"- Import the data into our views.py\n",
"- Use query set to search for the data in the database\n",
"- put into the dictionary to be pass to the front end to be rendered.\n",
"\n",
"How to use the querysets can be found [here](https://docs.djangoproject.com/en/3.1/ref/models/querysets/#django.db.models.query.QuerySet)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0lHii0KSp2Pl"
},
"source": [
"#Your views.py\n",
"from django.shortcuts import render\n",
"from django.http import HttpResponse\n",
"from .models import Product #importing the data\n",
"# Create your views here.\n",
" \n",
"def home_screen(request):\n",
" info = Product.objects.filter(title='title992')[0] #query the object from your database, rember to create the data first\n",
" data = { #adding the result to the data dictionary and pass to front-end\n",
" 'title':info.title,\n",
" 'description':info.description,\n",
" 'price':info.price\n",
" }\n",
"\n",
" return render(request,'home.html',data)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "VzY1AhxOqnoK"
},
"source": [
"#How to pass data from front-end to backend\n",
"\n",
"In order for the website to be responsive, not only does the backend need to pass data to frontend but the frontend also have to pss data to backend.\n",
"\n",
"Two commonly used methods:\n",
"- Include the query data in your url query string\n",
"- Post request\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GxnQPKe-skch"
},
"source": [
"#Include the query data in your url query string\n",
"\n",
"If you take a look at some of the urls you will see that there is a component that starts with '?' and then followed by a bunch of key and value pair\n",
"\n",
"Those are the data that are past to the backend. Hence in our html page, we can simply include an <code>a</code> tag to send the data to the backend\n",
"\n",
"For the backend, to receive the data we can use <code> request.GET.get(data_you_want_in_the_query_string,'none')</code>\n",
"\n",
"<code>request.GET</code> give a dictionary like object of the get parameter\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SuKOfCeLwRbR"
},
"source": [
"<h1> THis is your product page</h1>\n",
"\n",
"<a href=?num={{num}}>next_product</a>\n",
"<p>{{title}}</p>\n",
"<p>{{description}}</p>\n",
"<p>{{price}}</p>"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Aufk2UeKwQzq"
},
"source": [
"def home_screen(request):\n",
" num = request.GET.get('num','1')\n",
" print(num)\n",
" info = Product.objects.filter(title='title'+num)[0]\n",
" data = {\n",
" 'title':info.title,\n",
" 'description':info.description,\n",
" 'price':info.price,\n",
" 'num':int(num)+1\n",
" }\n",
"\n",
" return render(request,'home.html',data)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "xoHQwyKowmrh"
},
"source": [
"# Setting up an api and receive the data via post.\n",
"For the frontend side of how to make a post request, it will be taught in the react workshop tmr.\n",
"\n",
"For now we will be using [postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop/related?hl=en) to simulate a post request from the from end.\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ND3StsQiczgf"
},
"source": [
"from django.shortcuts import render\r\n",
"from django.http import HttpResponse\r\n",
"from .models import Product\r\n",
"from django.views.decorators.csrf import csrf_exempt\r\n",
"import json\r\n",
"\r\n",
"@csrf_exempt #this csrf_exempt is to bypass one of the security features that django has\r\n",
"#do this only when you trust whoever who has access to the api and your api wont cost any irreversible damage\r\n",
"#if not you will need to include an csrf token in your request\r\n",
"\r\n",
"def process_api(request):\r\n",
" if request.method != 'POST':\r\n",
" return HttpResponse('Error 403',status=403)\r\n",
" \r\n",
" request_title = request.POST.get('title')\r\n",
" info = Product.objects.filter(title=request_title)[0]\r\n",
" data = {\r\n",
" 'title':info.title,\r\n",
" 'description':info.description,\r\n",
" 'price':float(info.price),\r\n",
" }\r\n",
" return HttpResponse(json.dumps(data),status = 200)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "OJaomS0nczng"
},
"source": [
"#remember to route your url to the api function\r\n",
"\r\n",
"from django.contrib import admin\r\n",
"from django.urls import path\r\n",
"from products.views import home_screen,contact_page,process_api\r\n",
"urlpatterns = [\r\n",
" path('',home_screen),\r\n",
" path('contact/',contact_page),\r\n",
" path('admin/', admin.site.urls),\r\n",
" path('api/product',process_api)\r\n",
"]\r\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "p-K3IgrUeIz4"
},
"source": [
"#How to use postman\r\n",
"\r\n",
"Postman is a very powerful tool when you want to do testing for your web applications\r\n",
"\r\n",
"Launch the app from the chrome store, and sign up for an account and sign in.\r\n",
"\r\n",
"If you dont want to sign up its fine too, just watch what I do.\r\n",
"\r\n",
"Once you get into the interface, on the main window, change the GET to POST. and key in the api route that you have set up just now.\r\n",
"\r\n",
"In this case it will be <code>127.0.0.1:8000/api</code> and below it you will see a body section, click in and enter the key and value pairs that you wish to send to the backend.\r\n",
"\r\n",
"The bottom section will show you the http response that the backend return, it the content is what you want then your api is working!\r\n",
"\r\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IvsZzRKyfzlW"
},
"source": [
"#How to deploy the backend server with heroku\r\n",
"\r\n",
"In your terminal, go to your project root folder, the one that contains the <code>manage.py</code> file.\r\n",
"\r\n",
"\r\n",
"Create a repo for it by running <code>git init</code> if you dont have git installed you can find the method [here](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)\r\n",
"\r\n",
"Then you need to first stage the changes that you have made by running <code>git add .</code>\r\n",
"\r\n",
"and commit the changes by <code>git commit -m 'message for this commit'</code>\r\n",
"\r\n",
"Run <code>heroku login</code> to login to your heroku account.\r\n",
"\r\n",
"Run <code>heroku create</code> to create a new heroku project under your account, by default the name will be given randomly, if you wish to have your own name, you can add it behind the create\r\n",
"\r\n",
"When done creating, you will be given an url in the form of <code>https://name-of-your-app.herokuapp.com</code> and now what we want to do is to add a git remote to heroku\r\n",
"\r\n",
"To do that we need to run <code>heroku git:remote -a name-of-your-app</code>\r\n",
"\r\n",
"Now install a package call gunicorn by <code>pip install gunicorn</code> This is needed because when we use manage.py runserver, it is running on the development server, when we are deploying it we can no longer use it. We need a different app server which in this case gunicorn.\r\n",
"\r\n",
"Run <code>gunicorn first_django.wsgi</code>\r\n",
"\r\n",
"You should see the website running in the link given.\r\n",
"\r\n",
"We now need to create a file called Procfile and store this command inside, this is to tell heroku what command to run\r\n",
"\r\n",
"run <code>touch Procfile</code> and open it up using the text editor.\r\n",
"\r\n",
"Then key in <code>web:gunicorn first_django.wsgi</code>\r\n",
"\r\n",
"Now if you run <code>heroku local</code>, you are trying to run the project locally using heroku. You should get the same thing as how you have run it on the development server\r\n",
"\r\n",
"Then run <code>pip freeze ->requirments.txt</code> to store all the package that you have installed for this project to the requirements.txt and heroku will use this to know what package to install.\r\n",
"\r\n",
"Go to your settings.py and add <code>STATIC_ROOT = os.path.join(BASE_DIR,'static')</code>to get a directory for your static files such as css and js\r\n",
"\r\n",
"Under the ALLOWED_HOST, add in the domain of your heroku app. Which is this <code>name-of-your-app.herokuapp.com</code>\r\n",
"\r\n",
"Now push it to heroku by <code>git add .</code> then <code>git commit -m 'message for this commit'</code> and finally <code>git push heroku master</code>\r\n",
"\r\n",
"\r\n",
"**HALF WAY THERE**\r\n",
"\r\n",
"\r\n",
"Now we want to deal with the database. Because heroku delete all the files and restore it once in a while and the infomation in the database will be lost, so we need to store it in the cloud. We will be using postgresql which is provided by heroku.\r\n",
"\r\n",
"First, install the dependency using <code>pip install psycopg2</code>\r\n",
"\r\n",
"Then go to heroku home page in you web browser, click on this project. In the Settings tag, you will see Config Vars with a button **Revel Config Vars** at the side. Click on it, and then copy the value corresponding to the DATABASE_URL\r\n",
"\r\n",
"It will be in this format:<code>postgres://USERNAME:PASSWORD@HOST:PORT/NAME</code>\r\n",
"\r\n",
"In your settings.py change the DATABASE accordingly in this format.\r\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "k5v7romgqGmE"
},
"source": [
"DATABASES = {\r\n",
" 'default': {\r\n",
" 'ENGINE': 'django.db.backends.postgresql',#change from the default sqlit3 to postgresql\r\n",
" #fill in the values in your url string \r\n",
" 'NAME': 'd46a3fm2pmo145',\r\n",
" 'HOST':'ec2-52-203-49-58.compute-1.amazonaws.com',\r\n",
" 'PORT':5432,\r\n",
" 'USER':'wvoznxouhbeaqf',\r\n",
" 'PASSWORD':'0cbbb979d4f4f1622408d92c2389c07cfa603d259005bd9bec20d497f8ffd858',\r\n",
" }\r\n",
"}"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "2d-j-z2zqV70"
},
"source": [
"Run <code>python manage.py migrate</code> to migrate your existing models to your new database.\r\n",
"\r\n",
"Note that your old data in your sqlite3 database wont be preservered so you will need to create another super user account using <code>python manage.py createsuperuser</code> and add data to the database if you need\r\n",
"\r\n",
"**LAST PART**\r\n",
"We will need to deal with the static files that we have for example the images, css and js files.\r\n",
"\r\n",
"first we need to do <code>python mange.py collectstatic</code> which will help you collect all the static files you need for django admin site into on folder automatically. you can add your own static files to the diretory and use them in your templates by <code>{%load static%}</code> at the top of your template to 'import' the directory and then use <code>{%static 'path/to/your/file'%}</code>\r\n",
"\r\n",
"Go to your urls.py and make the following changes\r\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "pWsS2j-dtKNj"
},
"source": [
"from django.conf import settings\r\n",
"from django.conf.urls.static import static\r\n",
"\r\n",
"urlpatterns = [\r\n",
" ...\r\n",
"] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "7BzM1dhTtRYA"
},
"source": [
"Now we need to serve the static images from the app server.\r\n",
"\r\n",
"To do this we run <code>pip install whitenoise</code>\r\n",
"\r\n",
"then add <code>'whitenoise.middleware.WhiteNoiseMiddleware',</code> to your MIDDLEWARES under the settings.py\r\n",
"\r\n",
"Then you want to update your requirments.txt by <code>pip freeze ->requirments.txt</code>\r\n",
"\r\n",
"Now push it to heroku by <code>git add .</code> then <code>git commit -m 'message for this commit'</code> and finally <code>git push heroku master</code>\r\n",
"\r\n",
"And when you click into the link given, you should see it running perfectly!!!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "l-lbpeBTtc9z"
},
"source": [
"#Conclusion\r\n",
"\r\n",
"There are many possiblilties with django and I think yall definitly learn alot during this lesson and hopefull this workshop will help you out in your future projects! \r\n",
"\r\n",
"Thank you for your time and if you have any questions feel free the message me and i will try my best to answer you!\r\n",
"\r\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BTBP4NSG_7vV"
},
"source": [
"References:\n",
"\n",
"https://careerfoundry.com/en/blog/web-development/whats-the-difference-between-frontend-and-backend/#:~:text=The%20backend%20(or%20%E2%80%9Cserver%2D,displayed%20as%20a%20web%20page.\n",
"\n",
"https://djangostars.com/blog/why-we-use-django-framework/#:~:text=Django%20is%20an%20open%2Dsource,are%20called%20%E2%80%9Cviews%E2%80%9D).\n",
"\n",
"https://docs.python.org/3/tutorial/venv.html\n",
"\n",
"https://docs.djangoproject.com/en/3.1/intro/tutorial02/\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "5r2HlVXw2rb0"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment