0
votes

Models.py

from datetime import datetime from cmrapp import db,login_manager from flask_login import UserMixin

@login_manager.user_loader
def load_user(user_id):
    return Registration.query.get(int(user_id))

class Registration(db.Model,UserMixin):
    id = db.Column(db.Integer(),primary_key=True)
    regid = db.Column(db.String(),unique=True)
    section = db.Column(db.String(),nullable= False)
    username = db.Column(db.String(20),unique=True,nullable = False)
    password = db.Column(db.String(60),nullable = False)

    def __repr__(self):
        return f"Registration('{self.username}','{self.regid}')"

class Participation(db.Model):
    id = db.Column(db.Integer(),primary_key=True)
    pname = db.Column(db.String(20),nullable= False)
    pregid = db.Column(db.String(),unique=True)
    psection = db.Column(db.String(),nullable=False)

    def __repr__(self):
        return f"Participation('{self.pname},'{self.pregid}','{self.psection}')"

@login_manager.user_loader
def load_user(mregid):
    return Memberdb.query.get(int(mregid))

class Memberdb(db.Model,UserMixin):
    id = db.Column(db.Integer(),primary_key=True)
    mregid = db.Column(db.String(20),nullable = False,unique=True)
    mname = db.Column(db.String(20),unique=True,nullable = False)
    mpassword = db.Column(db.String(60),nullable = False)
    organizers = db.relationship('Eventdb',backref='owner',lazy=True)

    def __repr__(self):
        return f"Memberdb('{self.mname}','{self.id}')"


****routes.py****

from flask import render_template,url_for,request,redirect,flash,request from cmrapp import app,db,bcrypt from cmrapp.data import fetch from datetime import datetime,date from cmrapp.userforms import Registerform,identityform,studentform,memberform,blockform from cmrapp.models import Registration,Participation,Memberdb from flask_login import login_user,current_user,logout_user,login_required

@app.route('/')
@app.route('/signup',methods=["GET","POST"])
def signuppage():
    if current_user.is_authenticated:
        return redirect(url_for('homepage'))
    form = Registerform() 
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user = Registration(username = form.username.data, regid = form.regno.data, password = 
                            hashed_password,section=form.section.data )
        db.session.add(user)
        db.session.commit()
        flash(f"Your Account has been Created! {form.username.data}",'success')
        return redirect(url_for('sloginpage'))
    else:

        return render_template('signup.html',title="Sign Up",form=form,consent=consent,diff=diff)

@app.route('/slogin',methods=["GET","POST"])
def sloginpage():
    if current_user.is_authenticated:
        return redirect(url_for('homepage'))
    form = studentform() 
    if form.validate_on_submit():
        user = Registration.query.filter_by(username = form.studentname.data).first()
        if user:
            if user and bcrypt.check_password_hash(user.password,form.spassword.data):
                login_user(user,True)
                next_page = request.args.get('next')
                return redirect(next_page) if next_page else redirect(url_for('homepage'))    
            else:
                flash(f'Login Unsuccessful ! Check Name and Password.','danger')
                return render_template('slogin.html',title ='Student Login',form=form)
        else:
            flash(f'User doesn\'t exist' ,'danger')
    return render_template('slogin.html',title ='Student Login',form=form)



@app.route('/msignup',methods=["GET","POST"])
def msignuppage():
    form = memberform()
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.memberpassword.data).decode('utf-8')
        user = Memberdb(mname = form.membername.data, mregid = form.secureid.data, mpassword = 
                         hashed_password )
        db.session.add(user)
        db.session.commit()
        flash('Your Account has been Created','success')
        return redirect('mlogin')
    else:
        return render_template('msignup.html',title="Member Account",form=form)
    # user = user1

@app.route('/mlogin',methods=["GET","POST"])
def mloginpage():
    form = memberform() 
    if form.validate_on_submit():
        # if form.membername.data == "Lucky" and form.memberpassword.data == "luckyG2611@":
        user = Memberdb.query.filter_by(mname = form.membername.data).first()
        if user:
            if user and bcrypt.check_password_hash(user.mpassword,form.memberpassword.data):
                login_user(user,True)
                next_page = request.args.get('next')
                return redirect(next_page) if next_page else redirect(url_for('mlist'))    
            else:
                flash(f'Login Unsuccessful ! Check Name and Password.','danger')
                return render_template('mlogin.html',title ='Member Login',form=form)
        else:
            flash(f'User doesn\'t exist' ,'danger')
    return render_template('mlogin.html',title ='Member Login',form=form)

****userform.py****

from flask_wtf import FlaskForm from wtforms import StringField,PasswordField,validators,SubmitField,BooleanField,ValidationError,BooleanField,SelectField,DateField,TextAreaField from wtforms.validators import DataRequired,Length,EqualTo from cmrapp.models import Registration,Participation,Memberdb from flask_login import current_user

class Registerform(FlaskForm):
    username = StringField('Name',
                            validators=[DataRequired(),Length(min=2,max =20),validators.regexp('^[a- 
                            zA-Z\s]+$',message="Name contains only string ! Try Again")])
    section = SelectField(u'Section',choices=[('1yr-A', 'Ist-A'),('1yr-B', 'Ist-B'), ('1yr-C','Ist- 
                          C'),('2yr-A', 'Sec-A'),('2yr-B', 'Sec-B'), ('2yr-C','Sec-C'),('3yr-A', 
                          'Third-A'),('3yr-B', 'Third-B'), ('3yr-C','Third-C')],validators= 
                          [DataRequired()],validate_choice=False,coerce=str)
    regno = StringField('Registration No.',
                         validators=[DataRequired(), Length(min=10,max=10),validators.regexp('[19]+ 
                         [DBCAG]+\d\d\d',message="Use your Respective Regno.")])

    password = PasswordField('Password',
                              validators=[DataRequired(),Length(min=10)])
    submit = SubmitField('Sign Up')

    def validate_username(self,username):
        user = Registration.query.filter_by(username=username.data).all()
        if user:
            raise ValidationError('Username Already Exist :(')
    
    def validate_regno(self,regno):
        regid = Registration.query.filter_by(regid=regno.data).all()
        if regid :
            raise ValidationError('Regno. Already Exist :(')

class studentform(FlaskForm):
    studentname = StringField('Name',
                                validators=[DataRequired(),Length(min=2,max =20)])
    spassword = PasswordField('Password',
                                validators=[DataRequired(),Length(min=10)])
    studentin = SubmitField('Log In')
    

class identityform(FlaskForm):
    identitypswd = PasswordField(validators=[DataRequired(),Length(min=10)])
    submit = SubmitField('Want to join')

    def validate_regid(self,pregid):
        user1 = Participation.query.filter_by(pregid = current_user.regid.data).all()
        if user1 :
            raise ValidationError('Already Enrolled :(')

class memberform(FlaskForm):
    membername= StringField('Member Name:',
                             validators=[DataRequired(),Length(min=2,max=20),validators.regexp('^[a- 
                             zA-Z\s]+$',message="Name contains only string ! Try Again")])
    memberpassword = PasswordField('Password',validators=[DataRequired(),Length(min=10)])
    secureid = StringField('UserId',
                            validators=[DataRequired(),Length(max=10),validators.regexp('[19]+ 
                            [BCA1.]+\d\d\d')])
    membersubmit = SubmitField('Get In')

    def validate_mname(self,mname):
        user1 = Memberdb.query.filter_by(mname = mname.data).all()
        if user1 is not None:
            raise ValidationError('Username Already Exist :(')
    def validate_mregid(self,mregid):
        mregid = Memberdb.query.filter_by(mregid = mregid.data).all()
        if mregid is not None:
            raise ValidationError('Already Exist :(')

i have imported all the required module also but it's not working but the first login page is working . if anybody knows about this .Can anyone help me out of this.

1

1 Answers

0
votes

You've coded two @login_manager.user_loaders. When you do that multiple times, the last one wins. (See here)

You'll have to choose which of Registration or Memberdb your app will use to represent a logged-in user.