init.py.........................................................
from flask import Flask
from v1.config import Config
from flask_migrate import Migrate
from v1.routes import main_bp
from v1.dbfile import db,login_manager
def create_app():
app=Flask(__name__)
app.config.from_object(Config)
db.__init__(app)
login_manager.__init__(app)
with app.app_context():
from v1.auth.signin import sign_in
from v1.auth.signup import sign_up
app.register_blueprint(sign_up)
app.register_blueprint(sign_in)
app.register_blueprint(main_bp)
db.create_all()
return app
...................................dbfile.......................................
from lib2to3.pgen2.token import GREATER
from webbrowser import get
from flask_login import UserMixin,LoginManager
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from flask_migrate import Migrate
from v1.config import Config
from werkzeug.security import check_password_hash,generate_password_hash
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()
login_manager= LoginManager()
engine=create_engine(Config.SQLALCHEMY_DATABASE_URI,echo=True)
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))
class User(UserMixin,db.Model):
__tablename__='users_db'
_id = db.Column(db.Integer, primary_key=True)
password = db.Column(db.String,nullable=False)
email=db.Column(db.String(100), unique=True,nullable=False)
class Profile(UserMixin,db.Model):
__tablename__='profile_db'
_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100),db.ForeignKey("users._id"), nullable=False,unique=True)
name = db.Column(db.String,nullable=False)
bio = db.Column(db.String(1000),nullable=False)
# def __init__(self, user_id,user_name, email, password):
# self.user_id = user_id
# self.user_name = user_name
# self.email = email
# self.password=password
def set_password(self,password):
self.password=generate_password_hash(password,method="sha256")
def check_password(self, password):
return check_password_hash(self.password,password )
def __repr__(self):
return '<user {}>'.format(self.user_name)
Session = sessionmaker(bind = engine)
session = Session()
..........................................singup file....................................
from flask import Flask, render_template, redirect,Blueprint,flash,session,url_for,request
from flask_login import login_required, logout_user, current_user, login_user
from v1.form import registrationform
from v1.dbfile import db,User
sign_up=Blueprint ( 'sign_up',
__name__,
template_folder='template',
static_folder='static'
)
@sign_up.route('/signup',
methods=['GET','POST']
)
def signup():
if current_user.is_authenticated:
return redirect(url_for('main_bp.home'))
form=registrationform()
if form.validate_on_submit():
existing_user=User.query.filter_by(email=form.email.data).first()
if existing_user is None:
user = User(
email=form.email.data,
)
user.set_password(form.password.data)
db.session.add(user)
db.session.commit() # Create new user
login_user(user) # Log in as newly created user
return redirect(url_for('main_bp.home'))
flash('A user already exists with that email address.')
flash('Successfully Registered.')
return render_template(
'signup.jinja2',
title='Create an Account.',
form=form,
template='signup',
body="Sign up for a user account."
)
..........................sinup.jinja2/.....................................
{% extends "layout.jinja2" %}
{% block content %}
<div class="form-wrapper">
<div class="logo">
</div>
{% for message in get_flashed_messages() %}
<div class="alert alert-warning">
<button
type="button"
class="close"
data-dismiss="alert">
x
</button>
{{ message }}
</div>
{% endfor %}
<h1>Sign Up</h1>
<form method="POST" action="/signup">
{{ form.csrf_token }}
<fieldset class="email">
{{ form.email.label }}
{{ form.email(placeholder='abhijeet@example.com') }}
{% if form.email.errors %}
<ul class="errors">
{% for error in form.email.errors %}
<li>{{ error }}</li>{% endfor %}
</ul>
{% endif %}
</fieldset>
<fieldset class="password">
{{ form.password.label }}
{{ form.password }}
{% if form.password.errors %}
<ul class="errors">
{% for error in form.password.errors %}
<li>{{ error }}</li>{% endfor %}
</ul>
{% endif %}
</fieldset>
<fieldset class="password2">
{{ form.password2.label }}
{{ form.password2 }}
{% if form.password2.errors %}
<ul class="errors">
{% for error in form.password2.errors %}
<li>{{ error }}</li>{% endfor %}
</ul>
{% endif %}
</fieldset>
<div class="submit-button">
{{ form.submit }}
</div>
</form>
<div class="login-signup">
<div>
<span>Already have an account?</span>
<a href="{{ url_for('sign_in.login') }}">Log in.</a>
</div>
</div>
</div>
{% endblock %}
```