mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 12:22:47 +00:00 
			
		
		
		
	Add change profile page.
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
				
			|||||||
from flask_wtf import FlaskForm
 | 
					from flask_wtf import FlaskForm
 | 
				
			||||||
from wtforms import StringField, PasswordField, BooleanField, SubmitField
 | 
					from wtforms import StringField, PasswordField, BooleanField, SubmitField
 | 
				
			||||||
from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo
 | 
					from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo, Optional
 | 
				
			||||||
from wtforms import ValidationError
 | 
					from wtforms import ValidationError
 | 
				
			||||||
from ..models import User
 | 
					from ..models import User
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,6 +48,22 @@ class PasswordResetRequestForm(FlaskForm):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ChangeProfileForm(FlaskForm):
 | 
					class ChangeProfileForm(FlaskForm):
 | 
				
			||||||
    email = StringField('Email', validators=[DataRequired(), Length(1, 64),
 | 
					    email = StringField('Email', validators=[Optional(), Length(1, 64),
 | 
				
			||||||
                                             Email()])
 | 
					                                             Email()])
 | 
				
			||||||
 | 
					    username = StringField('Username', validators=[
 | 
				
			||||||
 | 
					        Optional(), Length(1, 64),
 | 
				
			||||||
 | 
					        Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,
 | 
				
			||||||
 | 
					               'Usernames must have only letters, numbers, dots or '
 | 
				
			||||||
 | 
					               'underscores')])
 | 
				
			||||||
 | 
					    password = PasswordField('Password', validators=[
 | 
				
			||||||
 | 
					        Optional(), EqualTo('password2', message='Passwords must match.')])
 | 
				
			||||||
 | 
					    password2 = PasswordField('Confirm password', validators=[Optional()])
 | 
				
			||||||
    submit = SubmitField('Submit')
 | 
					    submit = SubmitField('Submit')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def validate_email(self, field):
 | 
				
			||||||
 | 
					        if User.query.filter_by(email=field.data.lower()).first():
 | 
				
			||||||
 | 
					            raise ValidationError('Email already registered.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def validate_username(self, field):
 | 
				
			||||||
 | 
					        if User.query.filter_by(username=field.data).first():
 | 
				
			||||||
 | 
					            raise ValidationError('Username already in use.')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,7 +87,7 @@ def resend_confirmation():
 | 
				
			|||||||
    send_email(current_user.email, 'Confirm Your Account', 'auth/email/confirm',
 | 
					    send_email(current_user.email, 'Confirm Your Account', 'auth/email/confirm',
 | 
				
			||||||
               user=current_user, token=token)
 | 
					               user=current_user, token=token)
 | 
				
			||||||
    flash('A new confirmation email has benn sent to you by email.')
 | 
					    flash('A new confirmation email has benn sent to you by email.')
 | 
				
			||||||
    return redirect(url_for('maind.index'))
 | 
					    return redirect(url_for('main.index'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@auth.route('/reset', methods=['GET', 'POST'])
 | 
					@auth.route('/reset', methods=['GET', 'POST'])
 | 
				
			||||||
@@ -130,7 +130,15 @@ def password_reset(token):
 | 
				
			|||||||
def profile():
 | 
					def profile():
 | 
				
			||||||
    form = ChangeProfileForm()
 | 
					    form = ChangeProfileForm()
 | 
				
			||||||
    if form.validate_on_submit():
 | 
					    if form.validate_on_submit():
 | 
				
			||||||
        flash('It\'s just a test, nothing changed.')
 | 
					        flash('It is just a test, nothing changed.')
 | 
				
			||||||
 | 
					        if form.username.data:
 | 
				
			||||||
 | 
					            current_user.username = form.username.data
 | 
				
			||||||
 | 
					            db.session.add(current_user)
 | 
				
			||||||
 | 
					        if form.email.data:
 | 
				
			||||||
 | 
					            current_user.email = form.email.data
 | 
				
			||||||
 | 
					            current_user.confirmed = False
 | 
				
			||||||
 | 
					            db.session.add(current_user)
 | 
				
			||||||
 | 
					        db.session.commit()
 | 
				
			||||||
        return redirect(url_for('auth.profile'))
 | 
					        return redirect(url_for('auth.profile'))
 | 
				
			||||||
    return render_template('auth/profile.html.j2', form=form,
 | 
					    return render_template('auth/profile.html.j2', form=form,
 | 
				
			||||||
                           title='Profile')
 | 
					                           title='Profile')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,17 +4,41 @@
 | 
				
			|||||||
<div class="col s12">
 | 
					<div class="col s12">
 | 
				
			||||||
  <div class="card large">
 | 
					  <div class="card large">
 | 
				
			||||||
    <div class="card-content">
 | 
					    <div class="card-content">
 | 
				
			||||||
      <span class="card-title">Register</span>
 | 
					      <span class="card-title">Change profile</span>
 | 
				
			||||||
      <form method="POST">
 | 
					      <form method="POST">
 | 
				
			||||||
        {{ form.hidden_tag() }}
 | 
					        {{ form.hidden_tag() }}
 | 
				
			||||||
        <div class="input-field ">
 | 
					        <div class="input-field ">
 | 
				
			||||||
          <i class="material-icons prefix">email</i>
 | 
					          <i class="material-icons prefix">email</i>
 | 
				
			||||||
          {{ form.email(class='validate', type='email') }}
 | 
					          {{ form.email(type='email', placeholder=current_user.email) }}
 | 
				
			||||||
          {{ form.email.label }}
 | 
					          {{ form.email.label }}
 | 
				
			||||||
          {% for error in form.email.errors %}
 | 
					          {% for error in form.email.errors %}
 | 
				
			||||||
            <span class="helper-text" style="color:red;">{{ error }}</span>
 | 
					            <span class="helper-text" style="color:red;">{{ error }}</span>
 | 
				
			||||||
          {% endfor %}
 | 
					          {% endfor %}
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="input-field ">
 | 
				
			||||||
 | 
					          <i class="material-icons prefix">person</i>
 | 
				
			||||||
 | 
					          {{ form.username(placeholder=current_user.username) }}
 | 
				
			||||||
 | 
					          {{ form.username.label }}
 | 
				
			||||||
 | 
					          {% for error in form.username.errors %}
 | 
				
			||||||
 | 
					            <span class="helper-text" style="color:red;">{{ error }}</span>
 | 
				
			||||||
 | 
					          {% endfor %}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="input-field">
 | 
				
			||||||
 | 
					          <i class="material-icons prefix">vpn_key</i>
 | 
				
			||||||
 | 
					          {{ form.password() }}
 | 
				
			||||||
 | 
					          {{ form.password.label }}
 | 
				
			||||||
 | 
					          {% for error in form.password.errors %}
 | 
				
			||||||
 | 
					            <span class="helper-text" style="color:red;">{{ error }}</span>
 | 
				
			||||||
 | 
					          {% endfor %}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="input-field">
 | 
				
			||||||
 | 
					          <i class="material-icons prefix">vpn_key</i>
 | 
				
			||||||
 | 
					          {{ form.password2() }}
 | 
				
			||||||
 | 
					          {{ form.password2.label }}
 | 
				
			||||||
 | 
					          {% for error in form.password2.errors %}
 | 
				
			||||||
 | 
					            <span class="helper-text" style="color:red;">{{ error }}</span>
 | 
				
			||||||
 | 
					          {% endfor %}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
        <div class="card-action">
 | 
					        <div class="card-action">
 | 
				
			||||||
          {{ form.submit(class='btn right') }}
 | 
					          {{ form.submit(class='btn right') }}
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								data_dev.sqlite
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								data_dev.sqlite
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user