Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask, render_template, redirect, url_for, session
- from flask_bootstrap import Bootstrap
- from flask_wtf import FlaskForm
- from wtforms import StringField, PasswordField, BooleanField
- from wtforms.validators import InputRequired, Email, Length
- from flask_sqlalchemy import SQLAlchemy
- from werkzeug.security import generate_password_hash, check_password_hash
- from passlib.hash import sha256_crypt as crypt
- from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
- import smtplib
- from flask_mail import Mail, Message
- app = Flask(__name__)
- app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:root@localhost/login_flask"
- db = SQLAlchemy(app)
- Bootstrap(app)
- configure = app.config.update(
- DEBUG=True,
- MAIL_SERVER="smtp.gmail.com",
- MAIL_PORT=465,
- MAIL_USE_SSL=True,
- MAIL_USERNAME="mendezlinaresi@gmail.com",
- MAIL_PASSWORD="asesycorazonessonnuestraspalabras"
- )
- mail=Mail(app)
- login_manager = LoginManager()
- login_manager.init_app(app)
- login_manager.login_view = 'login'
- # ======================= #
- # Here is The
- # Model
- # ======================= #
- class User(UserMixin,db.Model):
- __tablename__ ="user"
- id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- username = db.Column(db.String(15), unique=True)
- password = db.Column(db.String(80))
- email = db.Column(db.String(50), unique=True)
- token = db.Column(db.String(1))
- # def __init__(self, id, username, password, email, token):
- # self.id = id
- # self.username = username
- # self.password = password
- # self.email = email
- # self.token = token
- # def is_active(self):
- # return True
- # def get_id(self):
- # return (self.id)
- # def is_anonymous(self):
- # return False
- # def is_authenticated(self):
- # return True
- ###########################
- # python
- # from __init__ import db
- # db.create_all()
- # exit()
- ###########################
- @login_manager.user_loader
- def load_user(user_id):
- return User.query.get(int(user_id))
- # ======================= #
- # Here is The
- # Form
- # ======================= #
- class LoginForm(FlaskForm):
- username = StringField('Usuario', validators=[InputRequired(), Length(min=4, max=15)])
- password = PasswordField('Contraseña', validators=[InputRequired(), Length(min=8, max=80)])
- remember = BooleanField('Recordar')
- class RegisterForm(FlaskForm):
- email = StringField('Email', validators=[InputRequired(), Email(message="Invalid Email"), Length(max=50) ])
- username = StringField('Usuario', validators=[InputRequired(), Length(min=4, max=15)])
- password = PasswordField('Contraseña', validators=[InputRequired(), Length(min=8, max=80)])
- password_replicate = PasswordField('Repite Contraseña', validators=[InputRequired(), Length(min=8, max=80)])
- # ======================= #
- # Here is The
- # Code
- # ======================= #
- @app.route("/")
- def index():
- return render_template("index.html")
- @app.route("/login/", methods=['GET', 'POST'])
- def login():
- form = LoginForm()
- if form.validate_on_submit():
- user = User.query.filter_by(username=form.username.data).first()
- passw = form.password.data
- passw = crypt.encrypt((form.password.data))
- print("pass1: "+passw)
- print("pass2: "+user.password)
- if user:
- if passw == user.password:
- login_user(user, remember=form.remember.data)
- session["logged_in"] = True
- return redirect(url_for('dashboard'))
- # if user and user.token==1:
- # if check_password_hash(user.password, passw):
- # login_user(user, remember=form.remember.data)
- # return redirect(url_for('dashboard'))
- return ("<h1>Invalida Username or Password!</h1>")
- return render_template("login.html", form=form)
- @app.route("/dashboard/")
- def dashboard():
- return render_template("dashboard.html")
- @app.route("/logout/")
- def logout():
- return render_template("logout.html")
- @app.route("/register/", methods=['POST', 'GET'])
- def register():
- form = RegisterForm()
- try:
- if form.validate_on_submit():
- username = form.username.data
- email = form.email.data
- if form.password.data == form.password_replicate.data:
- hashed_password=crypt.encrypt((form.password.data))
- verification_email = User.query.filter_by(email=email).first()
- username_verification = User.query.filter_by(username=username).first()
- print("hash: " + hashed_password)
- try:
- new_user = User(username=username, email=email, password=hashed_password, token=0)
- db.session.add(new_user)
- db.session.commit()
- activation_email(email, username, hashed_password)
- return render_template("email_sender.html")
- except Exception as e:
- return("Email or Username is used")
- return render_template("register.html", form=form)
- except Exception as e:
- return (str(e))
- def activation_email(email, username, hashed_password):
- session['logged_in'] = True
- session['username'] = username
- msg=Message("Send Email for example %s" %username, sender="mendezlinaresi@gmail.com", recipients=[email])
- msg.body=str("Active your accountt http://localhost:5000/activate_email/%s/%s/%s" %(email, username, hashed_password))
- return mail.send(msg)
- @app.route("/activate_email/<string:email>/<string:username>/<string:hashed_password>")
- def activate_email(email, username, hashed_password):
- token=User.query.filter_by(email=email).first()
- token.token=1
- db.session.commit()
- return render_template("activate_email.html", name = username, email=email)
- if __name__=='__main__':
- app.secret_key = "aa42724c5b253a8775a7fcf187a88d82af259c3f88867b3640187783"
- app.config['SESSION_TYPE'] = "filesystem"
- app.run(debug=True)
Add Comment
Please, Sign In to add comment