<reponame>cy0913/pythontest<filename>code/main.py
import json

import pymysql
from flask import Flask, jsonify, redirect, url_for, render_template

# static_url_path  静态文件访问的时的url匹配时，路由规则里的路径名字 默认值是/static
from sqlalchemy.orm import sessionmaker

app = Flask(__name__, static_url_path='/static')

print(app.url_map)  # <Rule '/abc/<filename>' (GET, HEAD, OPTIONS) -> static>]


@app.route('/')
def index():
    return 'hello  flask'


@app.route('/profile.html')
def profile():
    """处理登录的逻辑"""

    # profile.html并且返回user_id
    with open('profile.html') as f:
        content = f.read()

    return content


@app.route('/profile_v2/<user_id>')
def profile2(user_id):
    print(user_id)
    """处理登录的逻辑"""

    # profile.html并且返回
    with open('profile.html') as f:
        content = f.read()
        # 替换xxx_name 为传入的名字
        # 会显示对应的名字和头像，不要忘记前段文件里修改标记
        content = content.replace('xxx_name', user_id)

    return content


# 使用模板
@app.route('/profile_v3/<user_id>')
def profile3(user_id):
    return render_template('profile.html')


# 给模板传数据
@app.route('/profile_v4/<user_id>')
def profile4(user_id):
    return render_template('profile.html', xxx_name=user_id)


# 从数据库查询数据
@app.route('/profile_v5/<user_id>')
def profile5(user_id):
    # 1连接数据库
    connect = pymysql.connect(host='localhost', port=3306, user='root', password='<PASSWORD>', database='flask_test1',
                              charset='utf8')

    # 2 获取cursor
    cursor = connect.cursor()
    # 3执行sql语句 防注入 params是列表 里面是填充sql占位符的数据
    params = [user_id]
    cursor.execute('select * from  user where user_id = %s', params)
    result = cursor.fetchone()
    print(result)
    # (1, 'halon', 'halon', 'halon.jpg', 'halon，山东人，属蛇，喜欢吃北京烤鸭，可是太胖，不能多吃,哈哈')

    # 4关闭cursor
    cursor.close()
    # 5关闭连接
    connect.close()

    return render_template('profile.html', xxx_name=user_id)


# 从数据库查询数据 并且传给模板
@app.route('/profile_v6/<user_id>')
def profile6(user_id):
    # 1连接数据库
    connect = pymysql.connect(host='localhost', port=3306, user='root', password='<PASSWORD>', database='flask_test1',
                              charset='utf8')

    # 2 获取cursor
    cursor = connect.cursor()
    # 3执行sql语句 防注入 params是列表 里面是填充sql占位符的数据
    params = [user_id]
    cursor.execute('select * from  user where user_id = %s', params)
    result = cursor.fetchone()
    print(result)
    # (1, 'halon', 'halon', 'halon.jpg', 'halon，山东人，属蛇，喜欢吃北京烤鸭，可是太胖，不能多吃,哈哈')

    # 4关闭cursor
    cursor.close()
    # 5关闭连接
    connect.close()

    return render_template('profile.html', user_name=result[2], short_description=result[4], head_img=result[3])


# from sqlalchemy import create_engine, Column, Integer, String
# from sqlalchemy.ext.declarative import declarative_base
# from sqlalchemy.orm import sessionmaker
#
# # 获取引擎  连接数据库
# engine = create_engine('mysql+pymysql://root:mysql@localhost:3306/flask_test1')
# # 获取Base 模型类基类
# Base = declarative_base()
#
#
# # 模型类 model
# class User(Base):
#     __tablename__ = 'user'
#     id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
#     user_id = Column(String(50), nullable=False)
#     user_name = Column(String(50), nullable=False)
#     head_img = Column(String(200), nullable=True)
#     short_description = Column(String(300), nullable=True)

# 用导入模块的形式  使用模型类
from models.models import engine, User


# 从数据库查询数据 并且传给模板
@app.route('/profile_v7/<user_id>')
def profile7(user_id):
    # 获取数据库会话类
    DBSession = sessionmaker(bind=engine)
    # 创建会话对象
    session = DBSession()
    # 根据userid查询到user对象
    user = session.query(User).filter(User.user_id == user_id).one()
    # 会话关闭
    session.close()
    print(user.user_name)

    return render_template('profile.html', user_name=user.user_name, short_description=user.short_description
                           , head_img=user.head_img)


# 返回JSON
@app.route('/testjson')
def testjson():
    json_dict = {
        "user_id": 1,
        "user_name": "halon"
    }
    # 不要用json.dumps  不符合 html协议 响应头信息不对
    # return json.dumps(json_dict)
    # jsonify 在转换json过程 会添加响应头信息  content-type  application/json
    return jsonify(json_dict)


# 重定向
@app.route('/demo1')
def demo1():
    return redirect('http://www.itheima.com')


# 重定向 跳转到个人主页  profile.html
@app.route('/demo2')
def demo2():
    return redirect('profile.html')


# 重定向 跳转到个人主页 通过视图函数的名字 profile跳转
# url_for('profile')  根据视图函数的名字 找到对应的url路径
@app.route('/demo3')
def demo3():
    return redirect(url_for('profile'))


# 重定向 传入参数
@app.route('/demo4')
def demo4():
    print(url_for('profile2', user_id='halon'))  #
    return redirect(url_for('profile2', user_id='halon'))


@app.route('/demo5')
def demo5():
    # 自定义一个状态码  后台和前段 要协商好 做什么
    return '状态码为 666', 666


if __name__ == '__main__':
    # 运行服务器
    app.run()
num1 =1
num2=123
num3=3
num4 = 40
