zoukankan      html  css  js  c++  java
  • 学习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'
  • 相关阅读:
    grape入门
    半个小时写的一个二叉搜索树,实现了增,删,查功能
    Struts2 MVC 同 Spring MVC 的比较
    阿里巴巴 2016 java 实习岗位笔试题(昨天出炉)
    自己用20分钟java实现的单向链表(含有增删改查操作)
    关于 古人劝学 --写的真心是好 真的有收获
    JDK动态代理堆栈图详解--干货
    论闷声挣大钱与网红现象
    spring beanfactory --实现自己简单的 bean工厂类
    Spring IOC example one
  • 原文地址:https://www.cnblogs.com/hzjdpawn/p/11817428.html
Copyright © 2011-2022 走看看