forked from orson/bachemap
Initial refactor to splice forms from main app
This commit is contained in:
parent
50c17975e3
commit
a3e9179954
20
app.py
20
app.py
@ -1,29 +1,31 @@
|
||||
from flask import Flask, render_template, request, redirect, url_for, flash, send_from_directory
|
||||
from flask_pymongo import PyMongo, ObjectId
|
||||
#from flask_pymongo import PyMongo, ObjectId
|
||||
from flask_login import LoginManager, UserMixin, login_user, login_required, current_user, logout_user
|
||||
from werkzeug.utils import secure_filename
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from datetime import datetime
|
||||
from flask_pymongo import ObjectId
|
||||
#from datetime import datetime
|
||||
#from flask_pymongo import ObjectId
|
||||
import os
|
||||
from uuid import uuid4
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms import StringField, FileField, SubmitField, DateTimeField, SelectField, PasswordField
|
||||
from wtforms.validators import DataRequired, Length
|
||||
#from flask_wtf import FlaskForm
|
||||
#from wtforms import StringField, FileField, SubmitField, DateTimeField, SelectField, PasswordField
|
||||
#from wtforms.validators import DataRequired, Length
|
||||
import requests
|
||||
from config import Config
|
||||
from geopy.geocoders import Nominatim
|
||||
from forms import *
|
||||
from db import mongo
|
||||
|
||||
geolocator = Nominatim(user_agent="Bachemapa @ baches.qro.mx")
|
||||
def create_app(config=Config):
|
||||
app = Flask(__name__)
|
||||
app.config.from_object(config)
|
||||
|
||||
mongo = PyMongo(app)
|
||||
mongo.init_app(app)
|
||||
login_manager = LoginManager(app)
|
||||
login_manager.session_protection = "strong"
|
||||
|
||||
class User(UserMixin):
|
||||
""" class User(UserMixin):
|
||||
def __init__(self, user_data):
|
||||
self.id = str(user_data['_id'])
|
||||
self.username = user_data['username']
|
||||
@ -67,7 +69,7 @@ def create_app(config=Config):
|
||||
|
||||
def allowed_file(filename):
|
||||
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
|
||||
|
||||
"""
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
def index():
|
||||
if request.method == 'GET':
|
||||
|
||||
58
forms.py
Normal file
58
forms.py
Normal file
@ -0,0 +1,58 @@
|
||||
from flask_login import UserMixin
|
||||
from flask_pymongo import PyMongo, ObjectId
|
||||
from flask_wtf import FlaskForm
|
||||
from datetime import datetime
|
||||
from wtforms import StringField, FileField, SubmitField, DateTimeField, SelectField, PasswordField
|
||||
from wtforms.validators import DataRequired, Length
|
||||
#Init Mongo
|
||||
from db import mongo
|
||||
#User object creation
|
||||
|
||||
class User(UserMixin):
|
||||
def __init__(self,user_data):
|
||||
self.id = str(user_data['_id'])
|
||||
self.username = user_data["username"]
|
||||
self.referral_code = user_data["referral_code"]
|
||||
self.invited_by = user_data.get('invited_by')
|
||||
self.is_admin = user_data.get('is_admin', False)
|
||||
seelf.pwd = user_data.get('pwd')
|
||||
|
||||
#Getter method
|
||||
@staticmethod
|
||||
def get(user_id):
|
||||
user_data = mongo.db.users.find_one({"_id": ObjectId(user_id)})
|
||||
if user_data:
|
||||
return User(user_data)
|
||||
else:
|
||||
return None
|
||||
|
||||
#Pin creation form
|
||||
class PinForm(FlaskForm):
|
||||
description = StringField('¿Qué estamos viendo?', validators=[DataRequired()])
|
||||
photo = FileField('Evidencia fotogénica', validators=[DataRequired()])
|
||||
timedate = DateTimeField(default=datetime.now())
|
||||
typeofpin = SelectField('Tipo de cosa', choices=['bache', 'coladera', 'obra sin terminar', 'escombro', 'robo-asalto', 'biciestacionamiento', 'mala iluminación', 'bici blanca', 'zapato blanco'])
|
||||
submit = SubmitField('Agregar')
|
||||
|
||||
class LoginForm(FlaskForm):
|
||||
username = StringField('Usuario', validators=[DataRequired()])
|
||||
pwd = PasswordField('Tu clave', validators= [DataRequired()])
|
||||
submit = SubmitField('Entrar')
|
||||
|
||||
#decorator to simplify mongo unique validation calls
|
||||
def Unique(model, field, message=None):
|
||||
def _unique(form, field_data):
|
||||
if mongo.db[model.__name__.lower()].find_one({field.name: field_data.data}):
|
||||
raise ValidationError(message or f"{field.name} must be unique.")
|
||||
return _unique
|
||||
|
||||
class RegistrationForm(FlaskForm):
|
||||
username = StringField('Nombre de usuarix', validators=[DataRequired(), Unique('users', StringField('username', message="Este usuario ya existe"))])
|
||||
pwd = PasswordField('Clave', validators=[DataRequired(), Length(min=10), Unique('users', StringField('pwd', message="Esta clave no es muy buena, escoge otra"))])
|
||||
referral = StringField('ID de quien te invito', [DataRequired()])
|
||||
submit = SubmitField('Registrar')
|
||||
|
||||
|
||||
#restrict allowed file types~
|
||||
def allowed_file(filename):
|
||||
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
|
||||
@ -7,6 +7,8 @@ Flask==3.0.3
|
||||
Flask-Login==0.6.3
|
||||
Flask-PyMongo==2.3.0
|
||||
Flask-WTF==1.2.1
|
||||
geographiclib==2.0
|
||||
geopy==2.4.1
|
||||
idna==3.8
|
||||
itsdangerous==2.2.0
|
||||
Jinja2==3.1.3
|
||||
|
||||
Loading…
Reference in New Issue
Block a user