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请求生命周期

Django 系列博客(三)的更多相关文章

  1. Django 系列博客(十六)

    Django 系列博客(十六) 前言 本篇博客介绍 Django 的 forms 组件. 基本属性介绍 创建 forms 类时,主要涉及到字段和插件,字段用于对用户请求数据的验证,插件用于自动生成 h ...

  2. Django 系列博客(十三)

    Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数. ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True.当 model ...

  3. Django 系列博客(九)

    Django 系列博客(九) 前言 本篇博客介绍 Django 模板的导入与继承以及导入导入静态文件的几种方式. 模板导入 模板导入 语法:``{% include '模板名称' %} 如下: < ...

  4. Django 系列博客(八)

    Django 系列博客(八) 前言 本篇博客介绍 Django 中的模板层,模板都是Django 使用相关函数渲染后传输给前端在显式的,为了想要渲染出我们想要的数据,需要学习模板语法,相关过滤器.标签 ...

  5. Django 系列博客(七)

    Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...

  6. Django 系列博客(六)

    Django 系列博客(六) 前言 本篇博客介绍 Django 中的路由控制部分,一个网络请求首先到达的就是路由这部分,经过路由与视图层的映射关系再执行相应的代码逻辑并将结果返回给客户端. Djang ...

  7. Django 系列博客(四)

    Django 系列博客(四) 前言 本篇博客介绍 django 如何和数据库进行交互并且通过 model 进行数据的增删查改 ORM简介 ORM全称是:Object Relational Mappin ...

  8. Django 系列博客(一)

    Django 系列博客(一) 前言 学习了 python 这么久,终于到了Django 框架.这可以说是 python 名气最大的web 框架了,那么从今天开始会开始从 Django框架的安装到使用一 ...

  9. Django 系列博客(十四)

    Django 系列博客(十四) 前言 本篇博客介绍在 html 中使用 ajax 与后台进行数据交互. 什么是 ajax ajax(Asynchronous Javascript And XML)翻译 ...

随机推荐

  1. Geomystery现已上架!

    欢迎体验由王涵.程立智.郑昊.蔡镇泽.李明伦.温志成同学开发的几何解谜游戏Geomystery,现已上架Microsoft官方商城! https://www.microsoft.com/zh-cn/s ...

  2. windows putty xming virt-manager

    记一次windows环境使用linux下使用virt-manager软件的问题 环境:windows server 2008.ubuntu-server 软件:putty.virt-manager.x ...

  3. PYTHON进阶(4)

    学习内容: 1.html简介 2.html标签 3.堡垒机 一.html简介 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语 ...

  4. 【Solidity】学习(2)

    address 地址类型 40个16进制数,160位 地址包括合约地址和账户地址 payable 合约充值 balance,指的是当前地址的账户value,单位是wei this指的是当前合约的地址 ...

  5. WebPackBrows

    一个http工具,通过java编写 调用方法 s.y.webpackbrows.fac.WebPackFactor.getConnection 还会继续完善 下载位置 https://pan.baid ...

  6. SpringMVC框架出现 405 request method post not supported 的解决方法

    在SpringMVC框架中当使用post请求服务,然后请求成功转到一个静态文件,如html,htm等网页时.页面出现405 request method post not supported错误,只要 ...

  7. 代码雨 html实现

    <!DOCTYPE html> <html>    <head>        <meta charset="utf-8">    ...

  8. ETC的发展演变

      ETC是不停车电子收费系统,ETC专用车道是给那些装了ETC车载器的车辆使用的,采用电子收费方式. ETC( Electronic Toll Collection ) 不停车收费系统是目前世界上最 ...

  9. kaldi运行thchs30例子

    首先,thchs30有两种数据库,kaldi运行的数据库最好是 thchs30-openslr. 修改run.sh里面的语音库路径  thchs30=... 修改nj线程数 等于CPU的核心数 修改c ...

  10. CSS中的px与物理像素、逻辑像素、1px边框问题

    一直不太清楚CSS中的1px与逻辑像素.物理像素是个什么关系(作为一名前端感觉很惭愧 -_-!),今天终于花时间彻底弄清楚了,其实弄清楚之后就觉得事情很简单,但也只有在弄清楚之后,才会觉得简单(语出& ...