学习python-20191108(1)Mysql、Flask

一、使用pymysql模块操作MYSQL

导入pymysql模块: pip install pymysql

1、增删改

import pymysql
# 定义数据库连接信息
config = {
    'host''localhost',
    'port': 3306,
    'user''root',
    'password''',
    'database''python',
    'charset''utf8'
}
# 获取连接
conn = pymysql.connect(**config)
# 获取游标,相当于java中的Statement
cursor = conn.cursor()
# 执行sql
sql = '''
    insert into t_user
      (username,password,age,height)
    values
      (%s,%s,%s,%s) 
'''
num = cursor.execute(sql, ['alice''123', 18, 175.2])  # 为占位符%s赋值
print(num)
# 提交事务
conn.commit()
# 关闭资源
cursor.close()
conn.close()

2、查询

# 获取游标,相当于java中的Statement
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 可以指定cursor的类型为字典,查询
结果为Dict类型
# 执行sql
sql = '''
    select
        id,username,password,age,height
    from t_user   
'''
cursor.execute(sql)
# 获取查询结果
# print(cursor.fetchone())    # 每次读取一条,返回的是元组
# print(cursor.fetchmany(2))  #  获取多条
# print(cursor.fetchall())    # 获取所有
for u in cursor.fetchall():
    print(u['username'], u['age'])

 

二、Flask使用

https://dormousehole.readthedocs.io/en/latest/         Flask中文手册地址

导入Flask模块: pip install flask

  • 第一个Flask程序
from flask import Flask

# 创建一个app,即一个Flask应用
app = Flask(__name__)

# 定义路由,类似于SpringMVC中的@RequestMapping
@app.route('/')
def hello_world():
    return '<h1 style="color:red">Hello World</h1>'

@app.route('/welcome')
def welcome():
    return 'welcome to flask'

# 启动应用  port=8888  自定义端口号,debug=True 开启debug模式
 if __name__ == '__main__': app.run(port=8888, debug=True)
  • 请求参数
# Get请求
@app.route('/test_get')
def test_get():
    a = request.args.get('a')
    # 如果网页打开时只传入参数a,未传入参数b时,b默认为666
    b = request.args.get('b', default=666)  
    print(a, b)
    return 'get'
# Post请求
@app.route('/test_post', methods=['post', 'get'])  # 默认只接收GET请求,通过methods指定接收的请求方式
def test_post():
    a = request.form['a']
    b = request.form['b']
    print(a, b)
    return 'post'
  • 文件上传
@app.route('/load_form')
def load_form():
    return '''
        <form action="upload" method="post" enctype="multipart/form-data">
            file: <input type="file" name="file">
            <input type="submit" value="上传">
        </form>
    '''

@app.route('/upload', methods=['post'])
def upload():
    # 获取上传的文件
    file = request.files['file']
    # print(type(file)) # FileStorage类型
    # print(file.filename, len(file.read()), file.content_type)
    # time.strftime('%Y%m%d%H%M%S')得到年月日时分秒值,str(random.randint(1, 100))得到一个1到100间的随机数
    save_path = time.strftime('%Y%m%d%H%M%S') + str(random.randint(1, 100)) + file.filename
    file.save(save_path)
    return 'success'
  • 响应
from flask import Flask, request, redirect, jsonify
import time
import random
from flask import render_template

app = Flask(__name__)


# 响应html
@app.route('/test_html')
def test_html():
return '''
<h1>html</h1>
'''


# 重定向
@app.route('/test_redirect')
def test_redirect():
return redirect('/test_html')


# 响应json
@app.route('/test_json')
def test_json():
user = {'id': 1001, 'name': 'tom', 'age': 18, 'sex': 'male'}
return jsonify(user)


# 响应模板页
@app.route('/test_template')
def test_template():
return render_template('hello.html') # 指定模板文件名,默认在当前目录下的tempaltes中查找


if __name__ == '__main__':
app.run(debug=True)
 
 
  • Jinja2模板语法    Jinja2网站https://palletsprojects.com/ 
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    name = 'tom'
    age = 81
    users = [
        {'id': 1001, 'name': 'tom', 'age': 18, 'sex': 'male'},
        {'id': 1002, 'name': 'jack', 'age': 28, 'sex': 'female'},
        {'id': 1003, 'name': 'alice', 'age': 38, 'sex': 'male'}
    ]
    return render_template('result.html', username=name, age=age, users=users)
--result.html中部分代码--
<body>
    result.html <br>
    username:{{username}} <br>
    {% if age>60 %}
        老年
    {% elif age>30 %}
        中年
    {% elif age>18 %}
        少年
    {% else %}
        童年
    {% endif %}
    <br>
    <ul>
        {% for user in users %}
            <li>{{user.id}},{{user.name}},{{user.sex}}</li>
        {% endfor %}
    </ul>

</body>
# 全局异常处理   出现404错误,自动跳转到自定义的404.html网页去
@app.errorhandler(404)
def error_handler(e):
    print(e)
    return render_template('404.html')
  •  蓝图   使用蓝图实现模块化

https://dormousehole.readthedocs.io/en/latest/tutorial/views.html

使用蓝图前,所有代码放在一个py文件中。

第一步:新建多个py文件,把同一对象的相关操作放到一个独立的py文件中,这些独立的py文件就是一个个蓝图;

第二步:在主程序的py文件中注册蓝图,建立主程序与这些独立的py文件的关联。

下方为主程序的py文件

from flask import Flask
from py07_Flask框架.user_controller import user
from py07_Flask框架.product_controller import product

app = Flask(__name__)

# 注册蓝图
app.register_blueprint(user)
app.register_blueprint(product)

if __name__ == '__main__':
    app.run(debug=True)

下方为两个蓝图(py文件):user_controller.py和product_controller.py

#product_controller.py文件内容
from flask import Blueprint

product = Blueprint('product', __name__)

@product.route('/product_list')
def product_list():
    return 'product_list'
---------------------------------------------------------
#user_controller.py文件内容
from flask import Blueprint

# 创建蓝图
user = Blueprint('user', __name__)

# 定义蓝图路由
@user.route('/user_list')
def user_list():
    return 'user_list'

 

 

posted on 2019-11-08 07:48  闪亮的金子  阅读(194)  评论(0)    收藏  举报