flask 练习

    xiaoxiao2022-07-03  170

    -- encoding: utf-8 --

    from flask import * from flask_sqlalchemy import SQLAlchemy

    导入captcha 用于生成验证码

    from captcha.captcha import captcha from flask_uploads import UploadSet, IMAGES, configure_uploads import sys import os import re

    app = Flask(name) app.secret_key = ‘1812B1234567890’ app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘mysql+pymysql://root:12345678@127.0.0.1:3306/KaoShi’ db = SQLAlchemy(app)

    fn = getattr(sys.modules[‘main’], ‘file’) root_path = os.path.abspath(os.path.dirname(fn)) + “/static/upload” app.config[‘UPLOADED_PHOTO_DEST’] = root_path app.config[‘UPLOADED_PHOTO_ALLOW’] = IMAGES photos = UploadSet(‘PHOTO’) # 用来保存图片的对象 photos.save() configure_uploads(app, photos)

    用户表

    class User(db.Model): tablename = ‘user’ id = db.Column(db.Integer, primary_key=True) user_name = db.Column(db.String(200)) pwd = db.Column(db.String(200)) tel = db.Column(db.String(20))

    分类表

    class Cate(db.Model): tablename = ‘cate’ id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(200)) goods_list = db.relationship(‘Goods’, backref=‘cate’)

    商品表

    class Goods(db.Model): tablename = ‘goods’ id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(200)) img_url = db.Column(db.String(500)) price = db.Column(db.DECIMAL(10,2), default=9999999.99) # 详情,需要使用图文混排输入 content = db.Column(db.Text) c_id = db.Column(db.Integer, db.ForeignKey(‘cate.id’))

    首页

    @app.route(’/’) def index(): d={} # 加载数据,展示页面 cate_list = Cate.query.all() d[‘cate_list’] = cate_list return render_template(‘首页.html’, data=d)

    列表页

    @app.route(’/view/<c_id>’, methods=[‘GET’, ‘POST’]) def view(c_id): “”“根据分类ID查询对应到商品列表,并展示”"" if request.method == ‘POST’: # 开始批量删除 # 获取数据,被选择的商品ID列表 del_list = request.form.getlist(‘select’) for g_id in del_list: g = Goods.query.get(g_id) db.session.delete(g) db.session.commit()

    current_page = request.args.get('page', 1, type=int) # 当前页 per_page = 2 # 每页显示的条数 d = {} # 加载数据,展示页面 # 菜单 cate_list = Cate.query.all() d['cate_list'] = cate_list # 商品列表 goods_list = Goods.query.filter(Goods.c_id == c_id).paginate(current_page, 2) d['goods_list'] = goods_list.items # 商品列表信息 d['current_page'] = goods_list.page # 当前页 d['total_page'] = goods_list.pages # 总页数 d['c_id'] = c_id # 当前分类ID # 展示页面 return render_template('列表页.html', data=d)

    商品详情

    @app.route(’/detail/<g_id>’) def detail(g_id): d = {}

    goods = Goods.query.get(g_id) d['goods'] = goods return render_template('商品详情页.html', data=d)

    注册

    @app.route(’/register’, methods=[‘GET’, ‘POST’]) def register(): if request.method == ‘POST’: # 1、获取数据 # 用户名 user_name = request.form.get(‘user_name’) # 密码 pwd = request.form.get(‘pwd’) # 手机号 tel = request.form.get(‘tel’) # 验证码 img_code = request.form.get(‘img_code’)

    # 2、验证数据(验证码、正则匹配手机号) if all([user_name, pwd, tel, img_code]): # 正则验证手机号 if re.match('1[3-9]\d{9}', tel): # 验证码 - 忽略大小写 lower() if img_code.lower() == session.get('img_code').lower(): # 3、组织数据,(生成一个 User类 的实例) u = User() u.user_name = user_name u.pwd = pwd u.tel = tel # 4、数据写入到数据库 db.session.add(u) db.session.commit() return redirect(url_for('index')) else: flash('验证码不正确') else: flash('手机号格式错误') else: flash('数据不完整') # 展示注册页面 return render_template('注册页面.html')

    生成验证码图片

    @app.route(’/get_image’) def get_image(): name, text, image = captcha.generate_captcha() # 保存验证码图片 内容(文本) session[‘img_code’] = text

    # 返回对象Response res = make_response(image) res.headers['Content-Type'] = 'image/jpg' return res

    添加分类

    @app.route(’/add_cate’, methods=[‘GET’, ‘POST’]) def add_cate(): if request.method == ‘POST’: # 获取数据 cate_name = request.form.get(‘name’)

    # 验证数据 if all([cate_name]): # 判断分类是否存在 c_temp = Cate.query.filter(Cate.name == cate_name).first() if c_temp: flash('类别已经存在') else: # 添加到数据库 c = Cate(name=cate_name) db.session.add(c) db.session.commit() flash('添加成功') else: flash('信息不完整') # 展示页面 d={} cate_list = Cate.query.all() d['cate_list'] = cate_list return render_template('后台添加分类.html', data=d)

    添加商品

    @app.route(’/add_goods’, methods=[‘GET’, ‘POST’]) def add_goods(): # 添加商品 if request.method == “POST”: # 1、获取数据 cate_id = request.form.get(‘cate’) # 分类ID name = request.form.get(‘name’) price = request.form.get(‘price’) img = request.files.get(‘img’) content = request.form.get(‘content’)

    # 2、验证数据 if all([cate_id, name, price, content]): # 3、整理数据。上传图片。生成一个Goods的实例 g = Goods() g.name = name g.price = price g.content = content g.c_id = cate_id # 判断用户是否选择了图片 if img: filename = photos.save(img) img_path = '/static/upload/' + filename g.img= img_path # 4、写入到数据库 db.session.add(g) db.session.commit() flash('添加商品成功') else: flash('信息不完整') # 展示页面 d={} cate_list = Cate.query.all() d['cate_list'] = cate_list return render_template('后台添加商品.html', data=d)

    保存富文本的图片

    @app.route(’/submit-image’, methods=[‘GET’, ‘POST’]) def submit_image(): # 获取文件 get(‘file’) 为固定写法 img = request.files.get(‘file’) image_name = photos.save(img) # 将头像保存到 程序目录下 image_url = ‘/static/upload/’ + image_name # 生成图片保存到地址

    mes = {} mes['path'] = image_url # key为固定值,不可随意修改 mes['error'] = False # key为固定值,不可随意修改 return jsonify(mes)

    if name == ‘main’: # db.drop_all() # db.create_all() app.run()

    列表页 {% for cate in data.cate_list %} {{ cate.name }} {% endfor %}
    {% for goods in data.goods_list %} {% endfor %} 序号图片名称价格{{ loop.index }} {{ goods.name }}{{ goods.price }} 批量删除 {# 存放分页按钮的 #} <div class="box"> <div id="pagination" class="page"></div> </div> <script> $(function() { $("#pagination").pagination({ // data.current_pag 当前页 currentPage: {{ data.current_page }}, // data.total_page 总页数 totalPage: {{ data.total_page }}, // 点击页码所执行的函数 callback: function(current) { window.location.href="/view/{{data.c_id}}?page="+current } }); }); </script> 后台-添加分类数据 {% for m in get_flashed_messages() %} {​{ m }} {% endfor %} 分类名称: 添加 {% for c in data.cate_list %} <tr> <td>{{ loop.index }}</td> <td>{{ c.name }}</td> </tr> {% endfor %} </table> <ul> {% for c in data.cate_list %} <li>{{ loop.index }} - {{ c.name }}</li> {% endfor %} </ul> 序号名称 后台-添加商品 {# jquery 表单 #} <script src="../static/tinymce/js/tinymce/tinymce.min.js"></script> {# 富文本基础类库 #} <script src="../static/js/tinymce_setup.js"></script> {# 富文本配置文件 #} {% for m in get_flashed_messages() %} {{ m }} {% endfor %} 分类: {% for cate in data.cate_list %} {{ cate.name }} {% endfor %} 名称: 价格: 图片: 详情: 添加 商品详情 名称: 价格:
    详情: {{ data.goods.content | safe }} 注册 {# 导入jQuery基础类库,才可以使用 $ #} 首页 注册 {% for cate in data.cate_list %} {{ cate.name }} {% endfor %}
    最新回复(0)