从零开始学Python-day8
2016-12-23 12:37
381 查看
Python-day8
学习要有定位,明确目标地去学习。希望自己能坚持下去,并有所收获---leaves(ps:开发的核心思想就是对数据的增、删、改、查)
python07 -- python+mysql,前段html实现数据的更新,删除
一、浏览器请求数据的方法
浏览器请求数据的方法有GET、POST、PUT、DELETE、HEADER五种方法,其中python中常用的方法位GET和POST两种方法。GET与POST方法的具体区别如下。
GET,常用获取数据,默认为读,浏览器访问都是GET,前段GET请求,逻辑端通过request.args.get获取指定参数的值[request.args可以获取所有参数];
POST,常用于提交表单数据,写数据,浏览器默认不支持直接的POST方式,一般通过变动设置,逻辑端路由中添加methods=["GET","POST"]和前端html中form标签内添加action='/路径'来实现。
二、实现html前端POST方式提交表单数据
POST方法提交表单数据主要分两步实现:
1.逻辑端路由监听时添加post方法
2.前端html的form标签中添加action='/路径',此路径要与逻辑端监听路由一一致。
2.2 POST(GET)方法获取全部数据后的转换
request模块中method方法可以获取使用的访问方法。如 request.method 值可以为GET或者POST
2.2.1 POST方法获取的数据为
在此不讨论request.form.get("name",None)这种某个单一元素的数据转换。
request.form获取的数据为ImmutableMultiDict([('password', u'aaa'), ('name', u'aaa')]),为类字典格式使用dict转换下可以变成字典转换后的值类型为{'password': [u'dddd'], 'name': [u'aaa']},不过此时字典value值为元组。所以离我们真正想要的字典形式有点差距,可以使用字典生成式转换下。
2.2.2 具体的转换方法
request.form ====> ImmutableMultiDict([('password', u'dddd'), ('name', u'aaa')])
tmp_post = dict(request.form) ===> {'password': [u'dddd'], 'name': [u'aaa']}
dict( (k,v[0]) for k ,v in tmp_post.items()) ===> {'password': u'dddd', 'name': u'aaa'}
2.3 zip()函数
三、flask+mysql+html贯通实现更新和删除操作
3.1 更新、删除的逻辑端以及前端html代码
3.2 更新操作剖析
1.通过userlist获取到所有数据库中的数据以后,在userlist.html中展示出来,展示的时候添加一栏超链接<td><a href='/user/update?id=`user`.`id`'>更新</a> <a href='/user/delete?id=`user`.`id`'>删除</a></tr>可以实现更新删除两个选项。当点击更新按钮后的步骤为,获取更新的页面,将自己点击更新的那条元素的信息塞到页面对应的地方,更改我们想要的信息后,点击确认按钮post到逻辑端进行修改,然后跳转回userlist的用户列表界面。
2.userlist的html前端代码以及访问截图
3.点击更新后跳转页面
4.点击更新页面中的确认按钮后传递到逻辑端进行操作
3.3 更新操作总结
3.3.1 更新的大体流程分为两步:
I:GET获取更新用户信息后渲染到html页面,便于用户自己更改信息
II:POST将更改后的信息提交到逻辑端处理
3.3.2 更新的userinfo.html前端中,input标签内要记得写name参数,get请求是value值要为用户从数据库中查找出来的数据,form标签中的action='/路径'与监听路由一直,使得POST提交表单数据时能得到正确的处理。
3.3.3 html前端中的下拉框实现
3.4 删除操作
删除操作同更新,不过删除只需要一步,跟进用户id号删除。
具体步骤如下:GET方法获取到用户id号,拼接sql语句,逻辑端删除用户。完成删除操作
3.5 思路
开发中整体核心思想就是增、删、改、查这几种数据操作,不同的是后端查询获取数据是通过数据库还是API,开发的重点是思想。思想又分为技术思路和项目思路。
技术思路--增删改查
项目思路--用户管理系统、CMDB、监控系统等等。(主要涉及系统的功能要求,技术实现。比如常规的线上用户管理系统修改密码肯定是单独出来的一个功能)
学习要有定位,明确目标地去学习。希望自己能坚持下去,并有所收获---leaves(ps:开发的核心思想就是对数据的增、删、改、查)
python07 -- python+mysql,前段html实现数据的更新,删除
一、浏览器请求数据的方法
浏览器请求数据的方法有GET、POST、PUT、DELETE、HEADER五种方法,其中python中常用的方法位GET和POST两种方法。GET与POST方法的具体区别如下。
GET,常用获取数据,默认为读,浏览器访问都是GET,前段GET请求,逻辑端通过request.args.get获取指定参数的值[request.args可以获取所有参数];
POST,常用于提交表单数据,写数据,浏览器默认不支持直接的POST方式,一般通过变动设置,逻辑端路由中添加methods=["GET","POST"]和前端html中form标签内添加action='/路径'来实现。
##GET方法 url :/login?username=cc&userpwd=222 #获取某一单一的参数值 request.args.get("username",None) ===>cc #获取所有参数值(获取数据结构类似字典) request.args ===》ImmutableMultiDict([('username', u'cc'), ('userpwd', u'222')]) ##POST方法 #主要提交表单数据 #获取提交的某一个单一数值 request.form.get("name",None) ====> aaa #获取提交的所有参数的值(获取数据结构类似字典) request.form =====>ImmutableMultiDict([('password', u'aaa'), ('name', u'aaa')])
二、实现html前端POST方式提交表单数据
POST方法提交表单数据主要分两步实现:
1.逻辑端路由监听时添加post方法
2.前端html的form标签中添加action='/路径',此路径要与逻辑端监听路由一一致。
##具体实现post方法的代码 1.flask逻辑端代码 from flask import Flask,request,render_template,redirect app = Flask(__name__) @app.route('/') def index(): return redirect('/login') @app.route('/login',methods=["GET",'POST']) def login(): if request.method == "POST": print request.method print request.form.get("name",None) print request.form tmp_post = dict(request.form) print dict( (k,v[0]) for k ,v in tmp_post.items()) return render_template('login.html') if __name__ == "__main__": app.run(host='0.0.0.0',port=888,debug = True) 2.前端html代码 <html> <form action='/login' method="POST"> <p>name<input type='text' name='name'></p> <p>password<input type='password' name='password'></p> <p> <input type="submit" value='login'></p> </form> </html>
2.2 POST(GET)方法获取全部数据后的转换
request模块中method方法可以获取使用的访问方法。如 request.method 值可以为GET或者POST
2.2.1 POST方法获取的数据为
在此不讨论request.form.get("name",None)这种某个单一元素的数据转换。
request.form获取的数据为ImmutableMultiDict([('password', u'aaa'), ('name', u'aaa')]),为类字典格式使用dict转换下可以变成字典转换后的值类型为{'password': [u'dddd'], 'name': [u'aaa']},不过此时字典value值为元组。所以离我们真正想要的字典形式有点差距,可以使用字典生成式转换下。
2.2.2 具体的转换方法
request.form ====> ImmutableMultiDict([('password', u'dddd'), ('name', u'aaa')])
tmp_post = dict(request.form) ===> {'password': [u'dddd'], 'name': [u'aaa']}
dict( (k,v[0]) for k ,v in tmp_post.items()) ===> {'password': u'dddd', 'name': u'aaa'}
2.3 zip()函数
In [5]: help(zip) zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] ##使用zip生成字典 In [7]: zip(('name','age'),('Bob',14)) Out[7]: [('name', 'Bob'), ('age', 14)] In [8]: dict(zip(('name','age'),('Bob',14))) Out[8]: {'age': 14, 'name': 'Bob'} In [9]: dict(zip(('name','age','test'),('Bob',14,'job'))) Out[9]: {'age': 14, 'name': 'Bob', 'test': 'job'} In [10]: dict(zip(('name','age','test'),('Bob',14))) Out[10]: {'age': 14, 'name': 'Bob'} In [11]: dict(zip(('name','age'),('Bob',14,'job'))) Out[11]: {'age': 14, 'name': 'Bob'} In [12]:
三、flask+mysql+html贯通实现更新和删除操作
3.1 更新、删除的逻辑端以及前端html代码
##flask逻辑端代码 [root@test blog]# cat demo.py #!/usr/bin/python #coding:utf-8 from flask import Flask ,render_template,redirect,request import MySQLdb as mysql from datetime import datetime datas = mysql.connect(user='root',passwd='123456',db='reboot',charset='utf8') datas.autocommit(True) cur = datas.cursor() fields = ["id","name","name_cn","password","email","mobile","role","status","create_time"] app = Flask(__name__) def getNow(): now = datetime.now().strptime("%Y-%m-%d %H:%M:%S") return now @app.route('/user/userlist') def userlist(): sql = "select %s from %s" %(','.join(fields),'users') cur.execute(sql) res = cur.fetchall() users = [ dict((v,row[k]) for k ,v in enumerate(fields)) for row in res] return render_template('userlist.html',users = users) @app.route('/user/delete') def delete(): id = request.args.get('id',None) print id d_sql = "No id error" if id : d_sql = "DELETE from users where id = %s" % id cur.execute(d_sql) return redirect('/user/userlist') return render_template('test.html',errmes = d_sql) @app.route('/user/update',methods=['GET','POST']) def update(): if request.method == "POST": user = dict(request.form) user = dict((k,v[0]) for k ,v in user.items()) #print user ==>{'mobile': u'CCC', 'name_cn': u'ccccccc', 'id': u'2', 'name': u'cc', 'email': u'CC@chinacache.com'} #user.pop('id') tmp_list = [ "%s='%s'"%(k,v) for k,v in user.items() if k != "id"] #print tmp_list update_sql = "UPDATE users set %s where id=%s" %(','.join(tmp_list),user['id']) cur.execute(update_sql) return redirect('/user/userlist') else: id = request.args.get('id',None) print id select_sql = "No id error" if id : select_sql = "select %s from users where id = %s" %(','.join(fields),id) print select_sql cur.execute(select_sql) res = cur.fetchone() #print res ==>(2L, u'cc', u'cc', u'cC23 ', u'CC@chinacache.com', u'CCC', u'user', 0, datetime.datetime(2016, 11, 30, 16, 4, 33)) user = dict((v,res[k]) for k ,v in enumerate(fields)) #return redirect('/user/userlist') return render_template('userinfo.html',user = user) if __name__ == "__main__": app.run(host='0.0.0.0',port=888,debug=True) [root@test blog]# ##前端html代码 [root@test blog]# cat templates/userlist.html <html> <p>userlist</p> <table border='1px'> <thead> <tr><th>Name</th> <th>Name_CN</th> <th>Email</th> <th>Mobile</th> <th>Role</th> <th>Status</th> <th>Create_Time</th> <th>Operate></th></tr> </thead> <tbody> {% for user in users %} <tr><input type='hidden' name='id' value={{ user.id }}><td>{{ user.name}}</td> <td>`user`.`name_cn`</td> <td>`user`.`email`</td> <td>`user`.`mobile`</td> <td>`user`.`role`</td> <td>`user`.`status`</td> <td>`user`.`create_time`</td> <td><a href='/user/update?id=`user`.`id`'>更新</a> <a href='/user/delete?id=`user`.`id`'>删除</a></tr> {% endfor %} </tbody> </table> </html> [root@test blog]# [root@test blog]# cat templates/userinfo.html <html> <p>userinfo</p> <form action="/user/update" method="POST"> <table> <tr> <td><input type="hidden" name='id' value=`user`.`id` ></td> </tr> <tr> <td>Name<input type='text' name='name' value=`user`.`name`></td> </tr> <tr> <td>Name_CN<input type='text' name='name_cn' value =`user`.`name_cn`></td> </tr> <tr> <td>Email<input type='text' name='email' value=`user`.`email`></td> </tr> <tr> <td>Mobile<input type='text' name='mobile' value=`user`.`mobile`></td> </tr> <tr> <td>Role<select > {% if user.role == "admin" %} <option value = 'admin'>管理员</option> {% elif user.role == "sa" %} <option value = 'sa'>运 维</option> {% else %} <option value = 'user'>普通用户</option> {% endif %} </select> </td> </tr> <tr> <td>status<select > {% if user.status == 0 %} <option value = 0>正常</option> {% else %} <option value = 1>锁定</option> {% endif %} </select> </tr> <tr><input type="submit" value='确认修改'></td></tr> </form> </html> [root@test blog]#
3.2 更新操作剖析
1.通过userlist获取到所有数据库中的数据以后,在userlist.html中展示出来,展示的时候添加一栏超链接<td><a href='/user/update?id=`user`.`id`'>更新</a> <a href='/user/delete?id=`user`.`id`'>删除</a></tr>可以实现更新删除两个选项。当点击更新按钮后的步骤为,获取更新的页面,将自己点击更新的那条元素的信息塞到页面对应的地方,更改我们想要的信息后,点击确认按钮post到逻辑端进行修改,然后跳转回userlist的用户列表界面。
2.userlist的html前端代码以及访问截图
3.点击更新后跳转页面
4.点击更新页面中的确认按钮后传递到逻辑端进行操作
3.3 更新操作总结
3.3.1 更新的大体流程分为两步:
I:GET获取更新用户信息后渲染到html页面,便于用户自己更改信息
II:POST将更改后的信息提交到逻辑端处理
3.3.2 更新的userinfo.html前端中,input标签内要记得写name参数,get请求是value值要为用户从数据库中查找出来的数据,form标签中的action='/路径'与监听路由一直,使得POST提交表单数据时能得到正确的处理。
3.3.3 html前端中的下拉框实现
<tr> <td>Role<select > {% if user.role == "admin" %} <option value = 'admin'>管理员</option> {% elif user.role == "sa" %} <option value = 'sa'>运 维</option> {% else %} <option value = 'user'>普通用户</option> {% endif %} </select> </td> </tr>
3.4 删除操作
删除操作同更新,不过删除只需要一步,跟进用户id号删除。
具体步骤如下:GET方法获取到用户id号,拼接sql语句,逻辑端删除用户。完成删除操作
3.5 思路
开发中整体核心思想就是增、删、改、查这几种数据操作,不同的是后端查询获取数据是通过数据库还是API,开发的重点是思想。思想又分为技术思路和项目思路。
技术思路--增删改查
项目思路--用户管理系统、CMDB、监控系统等等。(主要涉及系统的功能要求,技术实现。比如常规的线上用户管理系统修改密码肯定是单独出来的一个功能)
相关文章推荐
- Python 从零开始 string
- 从零开始学习Python脚本语言
- Python之从零开始:什么是Python
- python入门笔记(Day8)--StringIO,BytesIO,环境变量, 操作文件和目录
- 从零开始用python实现神经网络
- python小白-day8 socketserver模块
- 【从零开始】Python3 学习笔记
- day8 python学习随笔(上)
- python之路-DAY8
- Python从零开始篇
- 从零开始学Python
- 从零开始学习编程语言-Python
- Python之从零开始:本博规划
- 从零开始,使用python快速开发web站点(1)
- 从零开始 python
- 从零开始,使用python快速开发web站点(2)
- Python学习笔记01 从零开始Hello world
- [python]从零开始学python——颜色的16进制于RGB之间的转换
- python-Day8
- Day8、Python