from flask import *
from flask_sqlalchemy import SQLAlchemy
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:@127.0.0.1:3306/qqq’
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/
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/
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_url = 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()
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客