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='/路径'来实现。
##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代码
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'[email protected]'}
#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'[email protected]', 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
userlist
Name
Name_CN
Email
Mobile
Role
Status
Create_Time
Operate>
{% for user in users %}
{{ user.name}}
`user`.`name_cn`
`user`.`email`
`user`.`mobile`
`user`.`role`
`user`.`status`
`user`.`create_time`
更新 删除
{% endfor %}
[root@test blog]#
[root@test blog]# cat templates/userinfo.html
userinfo