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. Python开发——12.socket编程

    一.OSI七层 1.物理层 物理层的主要功能是基于电气特性发送高低电压(高代表1,低代表0)形成电信号,使计算机完成组网以达到接入Internet的目的 2.数据链路层 数据链路层是用来定义电信号的分 ...

  2. 【转载】java定义二维数组问题。分清数组与集合的区别

    出处: 度娘知道 答案由用户{ heitianba }提供. Q: int a[][] = new int[3][2];  a[0] = {1,6};  报错:第二句是非法表达式.为什么? A: in ...

  3. aji unorder_map

  4. java面试一、1.5JVM

    免责声明:     本文内容多来自网络文章,转载为个人收藏,分享知识,如有侵权,请联系博主进行删除. 1.5.JVM JVM运行时内存区域划分

  5. js打断点

    F12打开调试器         资源sources     找到就是文件    选中需要打断点的行 获得段短点的值:将断点向后执行一步(页面提示的桥状小图标),然后选中上一步需要打断点的值,悬浮在上 ...

  6. parrot os 安装后更改更新源

    parrot os 安装后 parrot os 自带的更新源更新速度太慢(需要几个小时) 提供如下更新源 中国 USTC(中国科学技术大学和USTCLUG) - 合肥大学 CMCC 1 Gbps Ce ...

  7. vue数据更新UI不刷新显示解决方案

    vue比较常见的坑就是数据(后台返回)更新了,但是UI界面并没有更新,常见于以下情况: 一.数据为数组时1.通过数组索引修改数组元素例如: 此时UI数据并不会刷新 2.修改数组长度时: 解决方案: 如 ...

  8. android项目生成aar和引用aar解决方案

    引用依赖在项目中很常见,java开发一般是引用jar,所以android大家一般也是引用jar,但是android引用jar有时候会出现各种包冲突,很头痛!, 其实android有自己独特的引用aar ...

  9. 6-使用requests库封装类处理get/post请求

    1.request安装 1)pip安装,直接pip install requests 2)下载离线包安装,加压后,命令行进入路径,执行python setup.py install 2.创建工程 注意 ...

  10. 了解一下Ubuntu系统

    百度百科: ubuntu系统基于Debian发行版和GNOME桌面环境.Ubuntu的目标在于为一般用户提供一个最新的.同时又相当稳定的主要由自由软件构建而成的操作系统,它可免费使用,并带有社团及专业 ...