new_client.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from io import BytesIO
  2. from flask import request, render_template, redirect, url_for, flash
  3. from flask_login import current_user, login_required
  4. from flask_wtf import FlaskForm
  5. from flask_wtf.file import FileField
  6. from wtforms import StringField, validators
  7. from app import s3
  8. from app.developer.base import developer_bp
  9. from app.extensions import db
  10. from app.log import LOG
  11. from app.models import Client, File
  12. from app.utils import random_string
  13. class NewClientForm(FlaskForm):
  14. name = StringField("Name", validators=[validators.DataRequired()])
  15. icon = FileField("Icon")
  16. home_url = StringField("Home Url")
  17. @developer_bp.route("/new_client", methods=["GET", "POST"])
  18. @login_required
  19. def new_client():
  20. form = NewClientForm()
  21. if request.method == "POST":
  22. if form.validate():
  23. client = Client.create_new(form.name.data, current_user.id)
  24. client.home_url = form.home_url.data
  25. db.session.commit()
  26. if form.icon.data:
  27. file_path = random_string(30)
  28. file = File.create(path=file_path)
  29. s3.upload_from_bytesio(file_path, BytesIO(form.icon.data.read()))
  30. db.session.commit()
  31. LOG.d("upload file %s to s3", file)
  32. client.icon_id = file.id
  33. db.session.commit()
  34. flash("New client has been created", "success")
  35. return redirect(url_for("developer.client_detail", client_id=client.id))
  36. return render_template("developer/new_client.html", form=form)