flask登录注册图文混排上传图片批量删除正则验证一对多分页

-- 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:@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/’, 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/’)
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编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客

你可能感兴趣的:(标签,flask)