diff --git a/app/forms.py b/app/forms.py index 12dd95e..f6fce45 100644 --- a/app/forms.py +++ b/app/forms.py @@ -1,7 +1,7 @@ -from app.models import Brand, Category +from app.models import Brand, Category, User from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField, SelectMultipleField, DateField, IntegerField, SelectField, FloatField -from wtforms.validators import DataRequired, Optional +from wtforms.validators import DataRequired, Email, EqualTo, Optional, ValidationError class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) @@ -9,6 +9,24 @@ class LoginForm(FlaskForm): remember_me = BooleanField('Remember Me') submit = SubmitField('Sign In') +class RegistrationForm(FlaskForm): + username = StringField('Username', validators=[DataRequired()]) + email = StringField('Email', validators=[DataRequired(), Email()]) + password = PasswordField('Password', validators=[DataRequired()]) + password2 = PasswordField( + 'Repeat Password', validators=[DataRequired(), EqualTo('password')]) + submit = SubmitField('Register') + + def validate_username(self, username): + user = User.query.filter_by(username=username.data).first() + if user is not None: + raise ValidationError('Please use a different username.') + + def validate_email(self, email): + user = User.query.filter_by(email=email.data).first() + if user is not None: + raise ValidationError('Please use a different email address.') + class NewItemForm(FlaskForm): id = IntegerField("Product EAN", validators=[DataRequired()]) name = StringField("Name", validators=[DataRequired()]) @@ -16,10 +34,17 @@ class NewItemForm(FlaskForm): date = DateField("Insert Date", validators=[DataRequired()]) price_change = FloatField("Price", validators=[DataRequired()]) amount_change = IntegerField("Amount", validators=[Optional()]) - category = SelectMultipleField("Categories", choices=[(c.id, c.name) for c in Category.query.order_by("name").all()], validators=[Optional()]) - brand = SelectField("Brand", choices=[(b.id, b.name) for b in Brand.query.order_by("name").all()], validators=[DataRequired()]) + category = SelectMultipleField("Categories", choices=[], validators=[Optional()]) + brand = SelectField("Brand", choices=[], validators=[DataRequired()]) submit = SubmitField("Submit") + @classmethod + def new(cls): + form = cls() + form.category.choices = [(c.id, c.name) for c in Category.query.order_by("name").all()] + form.brand.choices = [(b.id, b.name) for b in Brand.query.order_by("name").all()] + return form + class NewCategoryForm(FlaskForm): name = StringField("Name", validators=[DataRequired()]) submit = SubmitField("Submit") diff --git a/app/routes.py b/app/routes.py index 5316d20..52fc5b9 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,7 +1,8 @@ from app import app, db, LOGGER -from app.forms import NewItemForm, LoginForm -from app.models import LoginToken, User, Item, Brand, Category, PriceChange, AmountChange -from app.utils import view_utils, database_utils, routes_utils +from app.forms import NewItemForm, LoginForm, RegistrationForm +from app.models import LoginToken, User, Item, Brand, PriceChange, AmountChange +from app.utils import view_utils, database_utils +from app.utils.routes_utils import render_custom_template as render_template from datetime import date from flask import abort, flash, redirect, request, url_for from flask.json import jsonify @@ -10,11 +11,9 @@ from werkzeug.urls import url_parse APPNAME = "scan2kasse" -render_template = routes_utils.render_custom_template - -@app.route('/') +@app.route(f'/{APPNAME}') def index(): - return "