Я пытаюсь войти в свою вторую учетную запись пользователя, то есть участника, но она не работает, и я не получаю никаких ошибок или не перенаправляюсь ни на одну страницу в flask - PullRequest
0 голосов
/ 14 июля 2020

Models.py

из datetime import datetime из cmrapp import db, login_manager из 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****

из flask import render_template, url_for, request, redirect, fla sh, запрос из cmrapp import app, db, bcrypt из cmrapp.data import fetch from datetime import datetime, date from cmrapp. userforms import Registerform, identityform, studentform, memberform, blockform из cmrapp.models импортировать регистрацию, участие, Memberdb из flask_login импортировать 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****

из flask_wtf импортировать FlaskForm из wtforms импортировать StringField, PasswordField, валидаторы, SubmitField, BooleanError, ValidationError, SelectField, DateField, TextAreaField из wtforms.validators import DataRequired, Length, EqualTo из cmrapp.models import Registration, Participation, Memberdb из 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 :(')

Я импортировал все необходимое модуль а lso, но это не работает, но первая страница входа в систему работает. Если кто-нибудь знает об этом. Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 14 июля 2020

Вы закодировали два @login_manager.user_loader s. Когда вы делаете это несколько раз, побеждает последний. (См. здесь )

Вам нужно будет выбрать, какое из Registration или Memberdb ваше приложение будет использовать для представления вошедшего в систему пользователя.

...