Beispiel #1
0
def ticket():
    form = AddTicketForm(request.form)
    if request.method == 'GET':
        return render_template('admin/manage_ticket.html', form=form)
    else:
        # 从表单中获取信息创建机票
        with db.auto_commit():
            new_ticket = Ticket()
            new_ticket.one_or_round = form.one_or_round.data
            new_ticket.name = form.name.data
            new_ticket.company_name = form.company_name.data
            new_ticket.depart_city = form.depart_city.data
            new_ticket.depart_airport = form.depart_airport.data
            new_ticket.arrive_city = form.arrive_city.data
            new_ticket.arrive_airport = form.arrive_airport.data
            new_ticket.depart_date = form.depart_date.raw_data[0]
            new_ticket.depart_time = form.depart_time.data
            new_ticket.arrive_date = form.arrive_date.raw_data[0]
            new_ticket.arrive_time = form.arrive_time.data
            new_ticket.return_date = form.return_date.raw_data[0]
            new_ticket.return_time = form.return_time.data
            new_ticket.economy_class_price = form.economy_class_price.data
            new_ticket.economy_class_num = form.economy_class_num.data
            new_ticket.business_class_price = form.business_class_price.data
            new_ticket.business_class_num = form.business_class_num.data
            new_ticket.first_class_price = form.first_class_price.data
            new_ticket.first_class_num = form.first_class_num.data
            db.session.add(new_ticket)
        return render_template('admin/manage_ticket.html', form=form)
Beispiel #2
0
def create_app():
    app = Flask(__name__)  # 新建一个Flask应用
    app.config.from_object('app.config')  # 使用自定义文件config.py中的项目配置
    # 注册blueprint
    # blueprint的作用在于实现模块间的解耦,详见:http://docs.jinkan.org/docs/flask/blueprints.html
    # 在web和admin两个package中的__init__文件中定义了两个blueprint实例
    from app.web import authentication, home, search
    from app.admin import authentication, manage
    app.register_blueprint(admin_blueprint)
    app.register_blueprint(web_blueprint)
    # 把app注册到数据库实例上,这个数据库实例db在app/models/base.py中创建
    db.init_app(app)
    # 初始化LoginManager
    login_manager.init_app(app)
    # 对于某些页面来说,必须要先登录才能访问,因此在登录前访问的话会弹出一个警告框显示login_message
    # 然后会跳转到login_view规定的URL
    login_manager.login_view = 'web.login'  # web.login是指在app/web/authentication.py中定义的login()视图方法
    login_manager.login_message = '请先登录或注册'
    # 执行ORM
    from app.models import user_model, ticket_model, order_model, admin_model  # 只有这里import的文件中的类会被映射
    with app.app_context():
        db.create_all(app=app)
        # 在第一次启动项目时添加一个管理员用户
        # 只有管理员用户能够修改后台数据
        if not Admin.query.filter_by(username='******').first():
            admin_user = Admin()
            admin_user.username = '******'
            admin_user.password = '******'
            admin_user.role = 'super'
            with db.auto_commit():  # 这个auto_commit()是在app/models/base.py中自定义的
                db.session.add(admin_user)
    return app
Beispiel #3
0
 def register_by_mobile(nickname, account, secret):
     with db.auto_commit():
         user = User()
         user.nickname = nickname
         user.mobile = account
         user.password = secret
         db.session.add(user)
Beispiel #4
0
def save_order(ticket_name):
    # 得到提交的表单
    form = OrderForm(request.form)
    with db.auto_commit():
        # 第一步新增一个订单
        new_order = Order()
        new_order.order_id = form.order_id.data
        new_order.ticket_type = form.ticket_type.data
        new_order.route = form.route.data
        new_order.depart_time = form.depart_time.data
        new_order.user_id = current_user.id
        new_order.status = '正在处理'
        db.session.add(new_order)
        # 第二步修改机票的信息(舱位数量更新)
        cur_ticket = Ticket.query.filter_by(name=ticket_name).first()
        type_map = {
            '经济舱': 'economy_class_num',
            '商务舱': 'business_class_num',
            '头等舱': 'first_class_num'
        }
        ticket_type = type_map.get(new_order.ticket_type)
        old_num = getattr(cur_ticket, ticket_type)  # 首先获取旧的数量信息
        setattr(cur_ticket, ticket_type, old_num - 1)  # 然后进行更新
        db.session.add(cur_ticket)
    return redirect(url_for('web.my_order'))
Beispiel #5
0
 def add_book(attrs_dict):
     with db.auto_commit():
         book = BookModel()
         book.book_id = str(uuid.uuid4()).replace('-', '')
         book.user_id = g.user.uid
         book.set_attrs(attrs_dict)
         db.session.add(book)
Beispiel #6
0
 def register_by_email(nickname, account, secret):
     with db.auto_commit():
         user = User()
         user.nickname = nickname
         user.email = account
         user.password = secret
         db.session.add(user)
     db.session.flush()
Beispiel #7
0
def register_by_email(nickname, email, secret, auth=1):
  u = User()
  u.nickname = nickname
  u.email = email
  u.password = secret
  u.auth = auth
  with app.app_context():
    with db.auto_commit():
      db.session.add(u)
Beispiel #8
0
def company_change(english_name):
    # 根据英文名称得到相应的公司
    _company = Company.query.filter_by(english_name=english_name).first()
    # 如果当前系统中有存储该航空公司的机票的话则无法删除该公司
    if Ticket.query.filter_by(company_name=_company.company_name).first():
        flash("存在此公司的机票,不能删除")
    # 成功删除
    else:
        with db.auto_commit():
            db.session.delete(_company)
    return redirect(url_for('admin.company'))
Beispiel #9
0
def order():
    if request.method == 'GET':
        # 得到所有的订单信息
        orders = OrderInfo(Order.query.all()).orders
        return render_template('admin/manage_order.html', orders=orders)
    # 当点击"确认"按钮时,会以POST形式提交表单,并且会包含订单的id,修改相应订单的状态
    else:
        order_id = request.args.get('order_id')
        _order = Order.query.filter_by(order_id=order_id).first()
        with db.auto_commit():
            _order.status = '已处理'
            db.session.add(_order)
        return redirect(url_for('admin.order'))
Beispiel #10
0
 def register_by_email(nickname, account, secret):
     """
         注册新增用户
         :return:
     """
     id = str(uuid.uuid4()).replace('-', '')
     with db.auto_commit():
         user = UserModel()
         user.id = id
         user.email = account
         user.nickname = nickname
         user.password = secret
         db.session.add(user)
def info():
    form = InfoForm(request.form)
    if request.method == 'GET':
        return render_template('web/my_info.html', form=form)
    else:
        if not form.validate():
            flash('输入信息有误')
        else:
            # 修改数据库中的用户密码
            user = User.query.filter_by(id=current_user.id).first()
            with db.auto_commit():
                user.password = form.password.data
                db.session.add(
                    user
                )  # 此处使用的虽然是add方法,但是会自动进行判断,如果当前对象已经存在,则执行更新操作,否则执行真正的add操作
        return redirect(url_for('web.info'))
def admin_add():
    # 从request中获取用户提交的表单
    form = AddAdminForm(request.form)
    admin_users = AdminInfo(Admin.query.all()).admin_users
    # 验证表单并添加管理员用户到数据库中
    if request.method == 'POST' and form.validate():
        with db.auto_commit():
            new_admin_user = Admin()
            new_admin_user.username = form.username.data
            new_admin_user.role = 'super'
            new_admin_user.password = form.password.data
            db.session.add(new_admin_user)
            return redirect(url_for('admin.admin_manage'))
    else:
        if not form.validate():
            flash('请输入相同密码')
        return render_template('admin/manage.html',
                               form=form,
                               users=admin_users)
def register():
    # 首先创建一个空白的注册表单
    form = RegisterForm(request.form)
    # 当客户端浏览器请求此URL时的方法是GET,这时候将包含表单的html文件返回
    if request.method == 'GET':
        return render_template('web/register.html', form=form)
    else:
        # 当用户填写好表单,点击"注册"按钮后,此时的方法是POST,这时应该获取表单内容
        new_user = User()
        new_user.username = form.username.data
        new_user.password = form.password.data
        # 然后判断信息合法性并提交数据库
        if User.query.filter_by(username=new_user.username).first():
            flash('用户名已存在,请更换')  # 通过flask自带的flash给出一个警告,在html中编写相应的script实现
            return redirect(url_for('web.register'))
        else:
            with db.auto_commit():
                db.session.add(new_user)
            return redirect(url_for('web.login'))
Beispiel #14
0
def company():
    # 创建一个添加公司信息的表单
    form = AddCompanyForm(request.form)
    # 获取数据库中所有公司的信息
    companies = CompanyInfo(Company.query.all()).companies
    if request.method == 'GET':
        return render_template('admin/manage_company.html',
                               form=form,
                               companies=companies)
    else:
        # 验证表单
        if not form.validate():
            flash('请填写完整信息')
        else:
            # 更新数据库
            with db.auto_commit():
                new_company = Company()
                new_company.english_name = form.english_name.data
                new_company.company_name = form.chinese_name.data
                db.session.add(new_company)
        return redirect(url_for('admin.company'))
def admin_change(username):
    # 删除管理员用户
    with db.auto_commit():
        admin_user = Admin.query.filter_by(username=username).first()
        db.session.delete(admin_user)
    return redirect(url_for('admin.admin_manage'))
Beispiel #16
0
def order_delete():
    order_id = request.args.get('order_id')
    with db.auto_commit():
        _order = Order.query.filter_by(order_id=order_id).first()
        db.session.delete(_order)
    return redirect(url_for('admin.order'))
Beispiel #17
0
def delete_user():
    uid = g.user.uid
    with db.auto_commit():
        user = User.query.filter_by(id=uid).first_or_404()
        user.delete()
    return DeleteSuccess()
Beispiel #18
0
def super_delte_user(uid):
    with db.auto_commit():
        user = User.query.filter_by(id=uid).first_or_404()
        user.delete()
        return DeleteSuccess(data=user)
Beispiel #19
0
from app import create_app
from app.models.base_model import db
from app.models.user import User

app = create_app()

with app.app_context():
  with db.auto_commit():
    su = User()
    su.email = '*****@*****.**'
    su.password = '******'
    su.nickname = 'Super'
    su.auth = 2
    db.session.add(su)
Beispiel #20
0
def delete_user():
    uid = g.user.uid
    with db.auto_commit():
        user = UserModel.query.filter_by(id=uid).first_or_404()
        user.delete()
    return SuccessException()