Django 系列博客(三) 前言 本篇博客介紹 django 的前後端交互及如何處理 get 請求和 post 請求。 get 請求 get請求是單純的請求一個頁面資源,一般不建議進行賬號信息的傳輸。 配置路由 配置視圖 配置頁面資源 post 請求 配置路由 配置視圖 配置頁面資源 前後端交互 ...
Django 系列博客(三)
前言
本篇博客介紹 django 的前後端交互及如何處理 get 請求和 post 請求。
get 請求
get請求是單純的請求一個頁面資源,一般不建議進行賬號信息的傳輸。
配置路由
from django.conf.urls import url
from django.contrib import admin
import app.views as app_views
import newApp.views as new_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', app_views.home),
# 路由採用正則匹配, ^以什麼開頭 $以什麼結果
# 註: 當路由沒有子路由是,才在末尾添加$
url(r'^index/$', app_views.index),
url(r'login', app_views.login_action),
url(r'^new/index/$', new_views.index)
]
配置視圖
from django.shortcuts import render, redirect
from django.http import HttpResponse
# Create your views here.
# 每一個請求,都對應一個視圖響應函數,來出現請求,完成響應
# def index(abc):
# return HttpResponse('hello django') # 第一個響應
import django.core.handlers.wsgi
def login_action(request):
return render(request, 'login.html') # 第一個響應頁面
# def home(request):
# return redirect('/index/') # 第一個重定向
def home(request):
return render(request, 'index.html')
def index(request):
return redirect('/')
配置頁面資源
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主頁</title>
</head>
<body>
<h1 style="text-align: center">app的主頁</h1>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄</title>
</head>
<body>
<h1 style="color: red">登錄</h1>
</body>
</html>
post 請求
配置路由
from django.conf.urls import url
from django.contrib import admin
from app import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home),
url(r'^index/$', views.index),
url(r'^login/$', views.login, name='lg'),
]
配置視圖
from django.shortcuts import render, redirect
import pymysql
# Create your views here.
def home(request):
return render(request, 'index.html')
def index(request):
return redirect('/')
'''
def login(request):
print(request.method)
# 如果獲取GET請求的提交數據
# import django.core.handlers.wsgi
# print(type(request))
# import django.http.request.QueryDict
# print(type(request.GET))
print(request.GET)
# usr = request.GET['usr'] # 不安全
usr = request.GET.get('usr', 'USR') # 安全, 第一個參數為數據的key, 第二個參數為預設值
print(usr)
pwd = request.GET.get('pwd') # 不設預設值,沒有取到值時,返回值為None
print(pwd)
return render(request, 'login.html')
'''
from django.http import HttpResponse
def login(request):
if request.method == 'GET':
stus = request.GET.getlist('stu')
print(stus)
return render(request, 'login.html')
# 沒有GET分支, 發來的請求為POST
usr = request.POST.get('usr')
pwd = request.POST.get('pwd')
print(usr, pwd)
# 連接資料庫 => ORM
conn = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='django')
cur = conn.cursor(pymysql.cursors.DictCursor)
# cur.execute('select * from user')
# users = cur.fetchall()
cur.execute('select * from user where usr=%s and pwd=%s', [usr, pwd])
res = cur.fetchone()
print(res)
if res != None:
return HttpResponse('登錄成功')
return HttpResponse('登錄失敗')
配置頁面資源
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主頁</title>
{# <link rel="stylesheet" href="./index.css">#}
{# <link rel="stylesheet" href="/static/index.css">#}
{# <link rel="stylesheet" href="/static/temp.css">#}
{# <link rel="stylesheet" href="/ooo/index.css">#}
{# <link rel="stylesheet" href="/ooo/temp.css">#}
{# <link rel="stylesheet" href="/static/css/test.css">#}
<link rel="stylesheet" href="/static/css/index.css">
</head>
<body>
<h1 style="text-align: center">主頁</h1>
<img src="/static/img/001.png" alt="">
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
<style>
.box {
border: 1px solid #ccc;
padding: 20px;
border-radius: 20px;
height: 380px;
}
</style>
</head>
<body>
{#<button class="btn btn-warning"> 按鈕</button>#}
{#<div class="btn-group">#}
{# <button class="btn btn-default btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true"#}
{# aria-expanded="false">#}
{# Large button <span class="caret"></span>#}
{# </button>#}
{# <ul class="dropdown-menu">#}
{# <li><a href="#">Action</a></li>#}
{# <li><a href="#">Another action</a></li>#}
{# <li><a href="#">Something else here</a></li>#}
{# <li role="separator" class="divider"></li>#}
{# <li><a href="#">Separated link</a></li>#}
{# </ul>#}
{#</div>#}
<div class="container">
<div class="box row col-sm-6 col-sm-offset-3">
{# action: 沒寫 | http://localhost:8801/login | /login/ | {% url 'url_name' %} #}
<form action="{% url 'lg' %}" method="GET">
{# {% csrf_token %}#}
<div class="form-group">
<label for="usr">用戶名:</label>
<input type="text" class="form-control" name="usr" id="usr" placeholder="請輸入用戶名">
</div>
<div class="form-group">
<label for="pwd">Password</label>
<input type="password" class="form-control" name="pwd" id="pwd" placeholder="請輸入密碼">
</div>
<div class="checkbox">
<label>
<input name="stu" type="checkbox" value="stu1"> 學生1
</label>
<label>
<input name="stu" type="checkbox" value="stu2"> 學生2
</label>
<label>
<input name="stu" type="checkbox" value="stu3"> 學生3
</label>
</div>
<button type="submit" class="btn btn-info pull-right">登錄</button>
</form>
</div>
</div>
{#<a href="/index/">前往主頁</a>#}
</body>
<script src="/static/bootstrap-3.3.7-dist/js/jquery-3.3.1.js"></script>
<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
</html>
前後端交互
Django請求生命周期