{"id":1410,"date":"2021-05-26T12:30:38","date_gmt":"2021-05-26T12:30:38","guid":{"rendered":"https:\/\/codeinsightacademy.com\/blog\/?p=1410"},"modified":"2023-02-05T09:45:14","modified_gmt":"2023-02-05T09:45:14","slug":"flask-cheat-sheet","status":"publish","type":"post","link":"https:\/\/codeinsightacademy.com\/blog\/python\/flask-cheat-sheet\/","title":{"rendered":"Flask Cheat Sheet"},"content":{"rendered":"\n<p>keyword arguments<\/p>\n\n\n\n<p><strong>Keyword arguments<\/strong>&nbsp;(or named&nbsp;<strong>arguments<\/strong>) are values that, when passed into a function, are identifiable by specific&nbsp;<strong>parameter<\/strong>&nbsp;names. <br>A&nbsp;<strong>keyword argument<\/strong>&nbsp;is preceded by a&nbsp;<strong>parameter<\/strong>&nbsp;and the assignment operator, = .&nbsp;<strong>Keyword arguments<\/strong>&nbsp;can be likened to dictionaries in that they map a value to a&nbsp;<strong>keyword<\/strong>.<\/p>\n\n\n\n<p><strong>The order of the arguments does not matter<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def my_function(child3, child2, child1):\n  print(\"The youngest child is \" + child3)\n\nmy_function(child1 = \"Emil\", child2 = \"Tobias\", child3 = \"Linus\")<\/code><\/pre>\n\n\n\n<p>The phrase&nbsp;<em>Keyword Arguments<\/em>&nbsp;are often shortened to&nbsp;<em>kwargs<\/em>&nbsp;in Python documentations.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>arguments vs keyword arguments (*args vs **kwargs)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def foo(*args, **kwargs):\n    print(args);\n    print(kwargs);\n    \nfoo(5, 6, 7, name=\"Shailesh\", age=32, city=\"Nagpur\");<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-16.png\"><img loading=\"lazy\" width=\"457\" height=\"44\" src=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-16.png\" alt=\"\" class=\"wp-image-1456\" srcset=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-16.png 457w, https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-16-300x29.png 300w\" sizes=\"(max-width: 457px) 100vw, 457px\" \/><\/a><figcaption>output<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"has-text-align-center\">Decorators<\/h2>\n\n\n\n<p>A decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying its structure.<br>Decorators are usually called before the definition of a function you want to decorate.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>### CREATE CUSTOM DECORATOR ###\nfrom functools import wraps\n\ndef my_decorator(f):\n    @wraps(f)\n    def msg(*args, **kwargs):\n        print(\"I am from custom decorator\")\n        print(\"Arguments:\", args)\n        print(\"Keyword Arguments:\", kwargs)\n        \n        return f(*args, **kwargs)\n        \n    return msg;\n\n\n@my_decorator    \ndef add(x, y):\n    print(f\"{x} + {y} = {x + y}\")\n\n    \n@my_decorator\ndef sub(x, y):\n    print(f\"{x} - {y} = {abs(x - y)}\")\n    \n    \n#invoke functions\nadd(5, y=6)\nsub(5, y=6)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-17.png\"><img loading=\"lazy\" width=\"261\" height=\"157\" src=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-17.png\" alt=\"\" class=\"wp-image-1458\"\/><\/a><figcaption>output<\/figcaption><\/figure>\n\n\n\n<h2 class=\"has-text-align-center\">Flask Framework<\/h2>\n\n\n\n<p>Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. <br>It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions.<\/p>\n\n\n\n<p>install flask module<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python -m pip install Flask<\/code><\/pre>\n\n\n\n<p>hello world<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, jsonify, request, render_template\n\napp = Flask(__name__)\n\n#YOUR FUNCTIONS HERE\n\nif __name__ == \"__main__\":\n    app.run(debug=True);\n    #app.run(host=\"0.0.0.0\", port=int(\"1234\"), debug=True)<\/code><\/pre>\n\n\n\n<p>render html template <strong>[NOTE: MAKE SURE TO KEEP ALL TEMPLATE FILES IN templates DIRECTORY]<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@app.route('\/')\ndef index():\n    #return \"Hello World\";\n    \n    data = {'company_name': \"TCET\"}\n    return render_template('hello_world.html', data = data)<\/code><\/pre>\n\n\n\n<p>templates\/hello_world.html<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;h1&gt;Hello World&lt;\/h1&gt;\n&lt;h3&gt;Welcome to {{data&#91;'company_name']}}&lt;\/h3&gt;<\/code><\/pre>\n\n\n\n<p>read get value<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@app.route('\/sqr', methods=&#91;'GET'])\ndef getSqr():\n    num1 = int(request.args.get('num1'));\n    return f\"Square of {num1} is {num1 * num1}\"\n\n\n@app.route('\/add', methods=&#91;'GET'])\ndef add():\n    num1 = int(request.args.get('num1'));\n    num2 = int(request.args.get('num2'));\n    \n    return f\"{num1} + {num2} = {num1 + num2}\";<\/code><\/pre>\n\n\n\n<p>read post value<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@app.route('\/sub', methods=&#91;'POST'])\ndef sub():\n    num1 = int(request.form.get('num1'));\n    num2 = int(request.form.get('num2'));\n    \n    return f\"{num1} - {num2} = {num1 - num2}\";<\/code><\/pre>\n\n\n\n<p>read raw json<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@app.route('\/mul', methods=&#91;'POST'])\ndef mul():\n    raw_json = request.get_json();\n    num1 = int(raw_json&#91;'num1']);\n    num2 = int(raw_json&#91;'num2']);\n    \n    return f\"{num1} * {num2} = {num1 * num2}\";<\/code><\/pre>\n\n\n\n<p>install pymysql module<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python -m pip install PyMySQL<\/code><\/pre>\n\n\n\n<p>install cors module<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python -m pip install -U flask-cors<\/code><\/pre>\n\n\n\n<p>get users from database<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, jsonify, request\nfrom flask_cors import CORS\nimport pymysql\n\napp = Flask(__name__)\ncors = CORS(app)\n\n@app.route('\/users', methods=&#91;'GET'])\ndef get_users():\n    # To connect MySQL database\n    conn = pymysql.connect(host='localhost', user='root', password = \"\", db='databasename')\n        \n    cur = conn.cursor()\n    cur.execute(\"select * from users LIMIT 10\")\n    output = cur.fetchall()\n\n    print(type(output)); #this will print tuple\t\n\n    for rec in output:\n        print(rec);\n        \n    # To close the connection\n    conn.close()\n\n    return jsonify(output);<\/code><\/pre>\n\n\n\n<p>fetch data using javascript fetch api<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let url = \"http:\/\/localhost:5000\";\nfetch(url)\n    .then(response =&gt; response.json())\n    .then(response =&gt; console.table(response));<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"has-text-align-center\">Flask RESTful API<\/h2>\n\n\n\n<p><em>Flask<\/em>-RESTful is an extension for&nbsp;<em>Flask<\/em>&nbsp;that adds support for quickly building&nbsp;<em>REST APIs<\/em>.<\/p>\n\n\n\n<p>install flask-restful<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python -m pip install flask-restful<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>MyApi Resource<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, request\nfrom flask_restful import Resource, Api\n\napp = Flask(__name__)\napi = Api(app)\n\nclass MyApi(Resource):\n    def __init__(self):\n        print(\"Constructor called...\")\n        \n    def get(self):\n        return {\"msg\" : \"get method\"}\n        \n    def post(self):\n        return {\"msg\" : \"post method\"}\n        \n    def put(self):\n        return {\"msg\" : \"put method\"}\n    \n    def delete(self):\n        return {\"msg\" : \"delete method\"}\n    \n    \n<strong>api.add_resource(MyApi, '\/myapiurl')<\/strong>\n\nif __name__ == \"__main__\":\n    app.run(debug=True)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Authenticate REST API<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, request, <strong>make_response<\/strong>\nfrom flask_restful import Resource, Api\n<strong>from functools import wraps<\/strong>\n\n\napp = Flask(__name__)\napi = Api(app)\n\n\n#define custom decorator @authorize\ndef authorize(f):\n    @wraps(f)\n    def kuchbhi(*args, **kwargs):\n        err_msg = \"Authentication required\";\n    \n        if(request.authorization == None):\n            return make_response('Not Authorized', 403, {'WWW-Authenticate' : err_msg})\n            \n        unm = request.authorization.username\n        pwd = request.authorization.password\n        \n        if(unm == 'admin' and pwd == 'admin@123'):\n            print(\"Correct username and password\")\n            return f(*args, **kwargs)\n        \n        return make_response('Not Authorized', 403, {'WWW-Authenticate' : err_msg})\n    \n    return kuchbhi\n\n\nclass MyApi(Resource):\n    \n    def __init__(self):\n        print(\"Constructor called...\")\n\n    <strong>@authorize<\/strong> \n    def get(self):\n        return {\"msg\" : \"get method\"}\n\n    <strong>@authorize<\/strong>    \n    def post(self):\n        return {\"msg\" : \"post method\"}\n\n    <strong>@authorize<\/strong>    \n    def put(self):\n        return {\"msg\" : \"put method\"}\n\n    <strong>@authorize<\/strong>\n    def delete(self):\n        return {\"msg\" : \"delete method\"}\n    \napi.add_resource(MyApi, '\/myapiurl')\n\nif __name__ == \"__main__\":\n    app.run(debug=True)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-15.png\"><img loading=\"lazy\" width=\"969\" height=\"526\" src=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-15.png\" alt=\"\" class=\"wp-image-1437\" srcset=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-15.png 969w, https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-15-300x163.png 300w, https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-15-768x417.png 768w\" sizes=\"(max-width: 969px) 100vw, 969px\" \/><\/a><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>apply authorize decorator to all methods of call<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, request, make_response\nfrom flask_restful import Resource, Api\nfrom functools import wraps\n\napp = Flask(__name__)\napi = Api(app)\n\n#define custom decorator authorize\ndef authorize(f):\n    @wraps(f)\n    def kuchbhi(*args, **kwargs):\n        err_msg = \"Authentication required\";\n    \n        if(request.authorization == None):\n            return make_response('Not Authorized', 403, {'WWW-Authenticate' : err_msg})\n            \n        unm = request.authorization.username\n        pwd = request.authorization.password\n        \n        if(unm == 'admin' and pwd == 'admin@123'):\n            print(\"Correct username and password\")\n            return f(*args, **kwargs)\n        \n        return make_response('Not Authorized', 403, {'WWW-Authenticate' : err_msg})\n    \n    return kuchbhi\n\n\nclass MyApi(Resource):\n    <strong>method_decorators = &#91;authorize]<\/strong>\n    \n    def __init__(self):\n        print(\"Constructor called...\")\n        \n    def get(self):\n        return {\"msg\" : \"get method\"}\n        \n    def post(self):\n        return {\"msg\" : \"post method\"}\n        \n    def put(self):\n        return {\"msg\" : \"put method\"}\n    \n    def delete(self):\n        return {\"msg\" : \"delete method\"}\n    \napi.add_resource(MyApi, '\/myapiurl')\n\nif __name__ == \"__main__\":\n    app.run(debug=True)<\/code><\/pre>\n\n\n\n<h2 class=\"has-text-align-center\">Testing API<\/h2>\n\n\n\n<p>test response status<br>test_myapiapp.py<br>where myapiapp.py is the file where all restful api defined<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#from filename import app\nfrom rest_api import app\nimport unittest\nimport base64\n\nclass RestAPITest(unittest.TestCase):\n    \n    def test_status(self):\n        tester = app.test_client(self)\n        response = tester.get('\/myapiurl')\n        self.assertEqual(response.status_code, 200)\n   \nif __name__ == \"__main__\":\n    unittest.main()<\/code><\/pre>\n\n\n\n<p>test content type<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def test_content_type(self):\n    tester = app.test_client(self)\n    response = tester.get('\/myapiurl')\n\n    self.assertEqual(response.content_type, \"application\/json\")<\/code><\/pre>\n\n\n\n<p>test content data<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def test_content(self):\n    tester = app.test_client(self)\n    response = tester.get('\/myapiurl')        \n    self.assertTrue(b'get' in response.data)<\/code><\/pre>\n\n\n\n<p>To pass Basic Auth credentials in header<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>creds = base64.b64encode(b\"admin:admin@123\").decode(\"utf-8\")\nresponse = tester.get('\/myapiurl', headers={\"Authorization\": f\"Basic {creds}\"})<\/code><\/pre>\n\n\n\n<p>complete test file code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#from filename import app\nfrom rest_api import app\nimport unittest\nimport base64\n\nclass RestAPITest(unittest.TestCase):\n    \n    def test_status(self):\n        tester = app.test_client(self)\n        #response = tester.get('\/myapiurl')\n        \n        creds = base64.b64encode(b\"admin:admin@123\").decode(\"utf-8\")\n        response = tester.get('\/myapiurl', headers={\"Authorization\": f\"Basic {creds}\"})\n        \n        self.assertEqual(response.status_code, 200)\n        \n    \n    def test_content_type(self):\n        tester = app.test_client(self)\n        #response = tester.get('\/myapiurl')\n        \n        creds = base64.b64encode(b\"admin:admin@123\").decode(\"utf-8\")\n        response = tester.get('\/myapiurl', headers={\"Authorization\": f\"Basic {creds}\"})\n        \n        self.assertEqual(response.content_type, \"application\/json\")\n        \n        \n    def test_content(self):\n        tester = app.test_client(self)\n        #response = tester.get('\/myapiurl')\n        \n        creds = base64.b64encode(b\"admin:admin@123\").decode(\"utf-8\")\n        response = tester.get('\/myapiurl', headers={\"Authorization\": f\"Basic {creds}\"})\n        \n        self.assertTrue(b'get' in response.data)\n        \n        \nif __name__ == \"__main__\":\n    unittest.main()<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-18.png\"><img loading=\"lazy\" width=\"275\" height=\"209\" src=\"https:\/\/codeinsightacademy.com\/blog\/http:\/\/codeinsightacademy.com\/blog\/wp-content\/uploads\/2021\/05\/image-18.png\" alt=\"\" class=\"wp-image-1470\"\/><\/a><figcaption>output<\/figcaption><\/figure>\n\n\n\n<h2>REST API CRUD<\/h2>\n\n\n\n<p>app.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pymysql\n\nfrom flask import Flask, jsonify, request\nfrom flask_cors import CORS\nimport pymysql\n\napp = Flask(__name__)\ncors = CORS(app)\n\n# To connect MySQL database\nconn = pymysql.connect(host='yourhost', user='youruser', password = \"yourpassword\", db='yourdatabase')\n\n@app.route('\/users', methods=&#91;'GET'])\ndef get_users():\n\n    cur = conn.cursor(<strong>pymysql.cursors.DictCursor<\/strong>)\n    cur.execute(\"select * from users LIMIT 10\")\n    output = cur.fetchall()\n\n    print(type(output)); #this will print tuple\n\n    for rec in output:\n        print(rec);\n\n    # To close the connection\n    #conn.close()\n\n    return jsonify(output);\n\n\n@app.route('\/users\/get_one_record', methods=&#91;'GET'])\r\ndef get_single_user():\r\n\r\n    cur = conn.cursor(pymysql.cursors.DictCursor)\r\n    userid = int(request.args.get('id'));\r\n    cur.execute(f\"select * from users WHERE id = {userid}\")\r\n    output = cur.fetchone()\r\n    \r\n    return jsonify(output);\n\n\n\n@app.route('\/users', methods=&#91;'DELETE'])\ndef deleteRecord():\n    cur = conn.cursor()\n    id = int(request.args.get('id'));\n\n    query = f\"delete from users where id = {id}\";\n    #print(query)\n    res = cur.execute(query);\n    conn.commit();\n    print(cur.rowcount, \"record(s) deleted\")\n\n    return \"Record deleted sussesfully\"\n\n@app.route('\/users', methods=&#91;'POST'])\ndef insertRecord():\n\n        #get raw json values\n        raw_json = request.get_json();\n        name= raw_json&#91;'name'];\n        age= raw_json&#91;'age'];\n        city= raw_json&#91;'city'];\n\n        sql=\"INSERT INTO users (id,name,age,city) VALUES (NULL,'\"+name+\"','\"+str(age)+\"','\"+city+\"')\";\n        cur= conn.cursor()\n\n        cur.execute(sql);\n        conn.commit()\n        return \"Record inserted Succesfully\"\n\n@app.route('\/users', methods=&#91;'PUT'])\ndef updateRecord():\n\n        raw_json = request.get_json();\n\n        #print(type(raw_json));\n\n        id = raw_json&#91;'id'];\n        name= raw_json&#91;'name'];\n        age= raw_json&#91;'age'];\n        city= raw_json&#91;'city'];\n        sql_update_quary=(\"UPDATE users SET name = '\"+name+\"',age = '\"+str(age)+\"',city = '\"+city+\"'WHERE id = '\"+str(id)+\"'\");\n        cur= conn.cursor()\n        cur.execute(sql_update_quary);\n        conn.commit()\n        return \"Record Updated Sussecfully\";\n\n\nif __name__ == \"__main__\":\n    #app.run(debug=True);\n    app.run(host=\"0.0.0.0\", port=int(\"1235\"), debug=True)\n<\/code><\/pre>\n\n\n\n<h2>script.js<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/const api_url = \"&lt;heroku_app_url>\"\r\nconst api_url = \"http:\/\/localhost:8080\/users\"\r\n\r\nfunction loadData(records = &#91;]) {\r\n\tvar table_data = \"\";\r\n\tfor(let i=0; i&lt;records.length; i++) {\r\n\t\ttable_data += `&lt;tr>`;\r\n\t\ttable_data += `&lt;td>${records&#91;i].name}&lt;\/td>`;\r\n\t\ttable_data += `&lt;td>${records&#91;i].age}&lt;\/td>`;\r\n\t\ttable_data += `&lt;td>${records&#91;i].city}&lt;\/td>`;\r\n\t\ttable_data += `&lt;td>`;\r\n\t\ttable_data += `&lt;a href=\"edit.html?id=${records&#91;i].id}\">&lt;button class=\"btn btn-primary\">Edit&lt;\/button>&lt;\/a>`;\r\n\t\ttable_data += '&amp;nbsp;&amp;nbsp;';\r\n\t\ttable_data += `&lt;button class=\"btn btn-danger\" onclick=deleteData('${records&#91;i].id}')>Delete&lt;\/button>`;\r\n\t\ttable_data += `&lt;\/td>`;\r\n\t\ttable_data += `&lt;\/tr>`;\r\n\t}\r\n\t\/\/console.log(table_data);\r\n\tdocument.getElementById(\"tbody\").innerHTML = table_data;\r\n}\r\n\r\nfunction getData() {\r\n\tfetch(api_url)\r\n\t.then((response) => response.json())\r\n\t.then((data) => { \r\n\t\tconsole.table(data); \r\n\t\tloadData(data);\r\n\t});\r\n}\r\n\r\n\r\nfunction getDataById(id) {\r\n\tfetch(`${api_url}\/get_one_record?id=${id}`)\r\n\t.then((response) => response.json())\r\n\t.then((data) => { \r\n\t\r\n\t\tconsole.log(data);\r\n\t\tdocument.getElementById(\"id\").value = data.id;\r\n\t\tdocument.getElementById(\"name\").value = data.name;\r\n\t\tdocument.getElementById(\"age\").value = data.age;\r\n\t\tdocument.getElementById(\"city\").value = data.city;\r\n\t})\r\n}\r\n\r\n\r\nfunction postData() {\r\n\tvar name = document.getElementById(\"name\").value;\r\n\tvar age = document.getElementById(\"age\").value;\r\n\tvar city = document.getElementById(\"city\").value;\r\n\t\r\n\tdata = {name: name, age: age, city: city};\r\n\t\r\n\tfetch(api_url, {\r\n\t\tmethod: \"POST\",\r\n\t\theaders: {\r\n\t\t  'Accept': 'application\/json',\r\n\t\t  'Content-Type': 'application\/json'\r\n\t\t},\r\n\t\tbody: JSON.stringify(data)\r\n\t})\r\n\t.then((response) => response.json())\r\n\t.then((data) => { \r\n\t\tconsole.log(data); \r\n\t\twindow.location.href = \"index.html\";\r\n\t})\r\n}\t\r\n\r\n\r\nfunction putData() {\r\n\t\r\n\tvar id = document.getElementById(\"id\").value;\r\n\tvar name = document.getElementById(\"name\").value;\r\n\tvar age = document.getElementById(\"age\").value;\r\n\tvar city = document.getElementById(\"city\").value;\r\n\t\r\n\tdata = {id: id, name: name, age: age, city: city};\r\n\t\r\n\tfetch(api_url, {\r\n\t\tmethod: \"PUT\",\r\n\t\theaders: {\r\n\t\t  'Accept': 'application\/json',\r\n\t\t  'Content-Type': 'application\/json'\r\n\t\t},\r\n\t\tbody: JSON.stringify(data)\r\n\t})\r\n\t.then((response) => response.json())\r\n\t.then((data) => { \r\n\t\tconsole.table(data);\r\n\t\twindow.location.href = \"index.html\";\r\n\t})\r\n}\r\n\r\n\r\nfunction deleteData(id) {\r\n\tuser_input = confirm(\"Are you sure you want to delete this record?\");\r\n\tif(user_input) {\r\n\t\t\/\/url = \"http:\/\/localhost:8080\/users?id=1234\"\r\n\t\t\r\n\t\tfetch(`${api_url}?id=${id}`, {\r\n\t\t\tmethod: \"DELETE\",\r\n\t\t\theaders: {\r\n\t\t\t  'Accept': 'application\/json',\r\n\t\t\t  'Content-Type': 'application\/json'\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify({\"_id\": id})\r\n\t\t})\r\n\t\t.then((response) => response.json())\r\n\t\t.then((data) => { \r\n\t\t\tconsole.log(data); \r\n\t\t\twindow.location.reload();\r\n\t\t})\r\n\t}\r\n}<\/code><\/pre>\n\n\n\n<h2>index.html<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\r\n&lt;html>\r\n\t&lt;head>\r\n\t\t&lt;title>CIA Institute - Python Flask Project&lt;\/title>\r\n\t\t&lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" crossorigin=\"anonymous\">\r\n\t\t&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/js\/bootstrap.bundle.min.js\"crossorigin=\"anonymous\">&lt;\/script>\r\n\t&lt;\/head>\r\n\t&lt;body class=\"d-flex flex-column h-100 container\">\r\n\t\t&lt;header>\r\n\t\t\t&lt;nav class=\"navbar navbar-expand-lg navbar-expand-sm navbar-light bg-light\">\r\n\t\t\t  &lt;div class=\"container-fluid\">\r\n\t\t\t\t&lt;div class=\"collapse navbar-collapse\" id=\"navbarNavAltMarkup\">\r\n\t\t\t\t  &lt;div class=\"navbar-nav\">\r\n\t\t\t\t\t&lt;a class=\"nav-link active\" aria-current=\"page\" href=\"#\">Listing&lt;\/a>\r\n\t\t\t\t\t&lt;a class=\"nav-link\" href=\"add.html\">Add New&lt;\/a>\r\n\t\t\t\t  &lt;\/div>\r\n\t\t\t\t&lt;\/div>\r\n\t\t\t  &lt;\/div>\r\n\t\t\t&lt;\/nav>\r\n\t\t&lt;\/header>\r\n\t\t\r\n\t\t&lt;table class=\"table table-striped table-hover text-center\">\r\n\t\t\t&lt;thead>\r\n\t\t\t\t&lt;th>Name&lt;\/th>\r\n\t\t\t\t&lt;th>Age&lt;\/th>\r\n\t\t\t\t&lt;th>City&lt;\/th>\r\n\t\t\t\t&lt;th>Action&lt;\/th>\r\n\t\t\t&lt;\/thead>\r\n\t\t\t&lt;tbody id=\"tbody\">\r\n\t\t\t\t\r\n\t\t\t&lt;\/tbody>\r\n\t\t\t&lt;tfoot>\r\n\t\t\t\t\r\n\t\t\t&lt;\/tfoot>\r\n\t\t&lt;\/table>\r\n\t\t\r\n\t\t&lt;footer class=\"footer mt-auto py-3 bg-light\">\r\n\t\t  &lt;div class=\"container text-center\">\r\n\t\t\t&lt;span class=\"text-muted\"> &amp;copy; CIA Institute 2023&lt;\/span>\r\n\t\t  &lt;\/div>\r\n\t\t&lt;\/footer>\r\n\t&lt;\/body>\r\n\t&lt;script src=\"script.js\">&lt;\/script>\r\n\t&lt;script>\r\n\t\tgetData();\r\n\t&lt;\/script>\r\n&lt;\/html>\n<\/code><\/pre>\n\n\n\n<h2>add.html<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html>\r\n\t&lt;head>\r\n\t\t&lt;title>CIA Institute - Python Flask Project&lt;\/title>\r\n\t\t&lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" crossorigin=\"anonymous\">\r\n\t\t&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/js\/bootstrap.bundle.min.js\"crossorigin=\"anonymous\">&lt;\/script>\r\n\t&lt;\/head>\r\n\t&lt;body class=\"d-flex flex-column h-100 container\">\r\n\t\t&lt;header>\r\n\t\t\t&lt;nav class=\"navbar navbar-expand-lg navbar-expand-sm navbar-light bg-light\">\r\n\t\t\t  &lt;div class=\"container-fluid\">\r\n\t\t\t\t&lt;div class=\"collapse navbar-collapse\" id=\"navbarNavAltMarkup\">\r\n\t\t\t\t  &lt;div class=\"navbar-nav\">\r\n\t\t\t\t\t&lt;a class=\"nav-link\" href=\"index.html\">Listing&lt;\/a>\r\n\t\t\t\t\t&lt;a class=\"nav-link active\" aria-current=\"page\" href=\"add.html\">Add New&lt;\/a>\r\n\t\t\t\t  &lt;\/div>\r\n\t\t\t\t&lt;\/div>\r\n\t\t\t  &lt;\/div>\r\n\t\t\t&lt;\/nav>\r\n\t\t&lt;\/header>\r\n\t\t\r\n\t\t&lt;h3>Add Document&lt;\/h3>\r\n\t\t\r\n\t\t&lt;form onsubmit=\"return false;\">\r\n\t\t  &lt;div class=\"mb-3\">\r\n\t\t\t&lt;label for=\"name\" class=\"form-label\">Name&lt;\/label>\r\n\t\t\t&lt;input type=\"text\" class=\"form-control\" id=\"name\" autofocus>\r\n\t\t  &lt;\/div>\r\n\t\t  &lt;div class=\"mb-3\">\r\n\t\t\t&lt;label for=\"exampleInputPassword1\" class=\"form-label\">Age&lt;\/label>\r\n\t\t\t&lt;input type=\"text\" class=\"form-control\" id=\"age\">\r\n\t\t  &lt;\/div>\r\n\t\t  &lt;div class=\"mb-3\">\r\n\t\t\t&lt;label for=\"city\" class=\"form-label\">City&lt;\/label>\r\n\t\t\t&lt;input type=\"text\" class=\"form-control\" id=\"city\">\r\n\t\t  &lt;\/div>\r\n\t\t  &lt;button class=\"btn btn-primary\" onclick=\"return postData()\">Submit&lt;\/button>\r\n\t\t  &lt;a href=\"index.html\" class=\"btn btn-primary\">Cancel&lt;\/a>\r\n\t\t&lt;\/form>\r\n\t\t\r\n\t\t&lt;footer class=\"footer mt-auto py-3 bg-light\">\r\n\t\t  &lt;div class=\"container text-center\">\r\n\t\t\t&lt;span class=\"text-muted\"> &amp;copy; CIA Institute 2022&lt;\/span>\r\n\t\t  &lt;\/div>\r\n\t\t&lt;\/footer>\r\n\t&lt;\/body>\r\n\t&lt;script src=\"script.js\">&lt;\/script>\r\n\t&lt;script>\r\n\t&lt;\/script>\r\n&lt;\/html>\n<\/code><\/pre>\n\n\n\n<h2>edit.html<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html>\r\n\t&lt;head>\r\n\t\t&lt;title>CIA Institute - Python Flask Project&lt;\/title>\r\n\t\t&lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" crossorigin=\"anonymous\">\r\n\t\t&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/js\/bootstrap.bundle.min.js\"crossorigin=\"anonymous\">&lt;\/script>\r\n\t&lt;\/head>\r\n\t&lt;body class=\"d-flex flex-column h-100 container\">\r\n\t\t&lt;header>\r\n\t\t\t&lt;nav class=\"navbar navbar-expand-lg navbar-expand-sm navbar-light bg-light\">\r\n\t\t\t  &lt;div class=\"container-fluid\">\r\n\t\t\t\t&lt;div class=\"collapse navbar-collapse\" id=\"navbarNavAltMarkup\">\r\n\t\t\t\t  &lt;div class=\"navbar-nav\">\r\n\t\t\t\t\t&lt;a class=\"nav-link\" href=\"index.html\">Listing&lt;\/a>\r\n\t\t\t\t\t&lt;a class=\"nav-link active\" aria-current=\"page\" href=\"add.html\">Add New&lt;\/a>\r\n\t\t\t\t  &lt;\/div>\r\n\t\t\t\t&lt;\/div>\r\n\t\t\t  &lt;\/div>\r\n\t\t\t&lt;\/nav>\r\n\t\t&lt;\/header>\r\n\t\t&lt;h3>Edit Document&lt;\/h3>\r\n\t\t&lt;form onsubmit=\"return false;\">\r\n\t\t\t&lt;input type=\"hidden\" class=\"form-control\" id=\"id\">\r\n\t\t  &lt;div class=\"mb-3\">\r\n\t\t\t&lt;label for=\"name\" class=\"form-label\">Name&lt;\/label>\r\n\t\t\t&lt;input type=\"text\" class=\"form-control\" id=\"name\" autofocus>\r\n\t\t  &lt;\/div>\r\n\t\t  &lt;div class=\"mb-3\">\r\n\t\t\t&lt;label for=\"exampleInputPassword1\" class=\"form-label\">Age&lt;\/label>\r\n\t\t\t&lt;input type=\"text\" class=\"form-control\" id=\"age\">\r\n\t\t  &lt;\/div>\r\n\t\t  &lt;div class=\"mb-3\">\r\n\t\t\t&lt;label for=\"city\" class=\"form-label\">City&lt;\/label>\r\n\t\t\t&lt;input type=\"text\" class=\"form-control\" id=\"city\">\r\n\t\t  &lt;\/div>\r\n\t\t  &lt;button class=\"btn btn-primary\" onclick=\"return putData()\">Update&lt;\/button>\r\n\t\t  &lt;a href=\"index.html\" class=\"btn btn-primary\">Cancel&lt;\/a>\r\n\t\t&lt;\/form>\r\n\t\t\r\n\t\t&lt;footer class=\"footer mt-auto py-3 bg-light\">\r\n\t\t  &lt;div class=\"container text-center\">\r\n\t\t\t&lt;span class=\"text-muted\"> &amp;copy; CIA Institute 2022&lt;\/span>\r\n\t\t  &lt;\/div>\r\n\t\t&lt;\/footer>\r\n\t&lt;\/body>\r\n\t&lt;script src=\"script.js\">&lt;\/script>\r\n\t&lt;script>\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\tconst id = urlParams.get('id');\r\n\t\tgetDataById(id);\r\n\t&lt;\/script>\r\n&lt;\/html><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>keyword arguments Keyword arguments&nbsp;(or named&nbsp;arguments) are values that, when passed into a function, are identifiable by specific&nbsp;parameter&nbsp;names. A&nbsp;keyword argument&nbsp;is preceded by a&nbsp;parameter&nbsp;and the assignment operator, = .&nbsp;Keyword arguments&nbsp;can be likened to dictionaries in that they map a value to a&nbsp;keyword. The order of the arguments does not matter The phrase&nbsp;Keyword Arguments&nbsp;are often shortened to&nbsp;kwargs&nbsp;in Python [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts\/1410"}],"collection":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/comments?post=1410"}],"version-history":[{"count":43,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts\/1410\/revisions"}],"predecessor-version":[{"id":2453,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts\/1410\/revisions\/2453"}],"wp:attachment":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/media?parent=1410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/categories?post=1410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/tags?post=1410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}