Reputation: 1
My pip list contains :
bcrypt 3.2.0
cffi 1.15.0
click 8.0.3
colorama 0.4.4
dnspython 2.2.0
email-validator 1.1.3
Flask 2.0.3
Flask-Bcrypt 0.7.1
Flask-Login 0.5.0
Flask-SQLAlchemy 2.5.1
Flask-WTF 1.0.0
greenlet 1.1.2
idna 3.3
itsdangerous 2.0.1
Jinja2 3.0.3
MarkupSafe 2.0.1
pip 22.0.3
psycopg2 2.9.3
pycparser 2.21
python-dotenv 0.19.2
setuptools 47.1.0
six 1.16.0
SQLAlchemy 1.4.31
Werkzeug 2.0.3
WTForms 3.0.1
My module.py code is as follows :
from enum import unique
from wsgiref.validate import validator
from flask import Flask, render_template, url_for, redirect
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from flask_wtf import FlaskForm
from wtforms import StringField , PasswordField, SubmitField
from wtforms.validators import InputRequired, Length, ValidationError
from flask_bcrypt import Bcrypt
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://postgres:password@localhost/auth'
app.config['SECRET_KEY'] = '12345'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(20), nullable = False, unique = True)
password = db.Column(db.String(80), nullable = False)
class RegisterForm(FlaskForm):
username = StringField(validators = [InputRequired(), Length(min = 4, max = 20)], render_kw = {"placeholder" : "Username"})
password = PasswordField(validators = [InputRequired(), Length(min = 4, max = 80)], render_kw = {"placeholder" : "Password"})
submit = SubmitField("Register")
def validate_username(self, username):
existing_username = User.query.filter_by(username = username.data).first()
if existing_username :
raise ValidationError(
"Username already Exists."
)
class LoginForm(FlaskForm):
username = StringField(validators = [InputRequired(), Length(min = 4, max = 20)], render_kw = {"placeholder" : "Username"})
password = PasswordField(validators = [InputRequired(), Length(min = 4, max = 80)], render_kw = {"placeholder" : "Password"})
submit = SubmitField("Register")
@app.route('/')
def home():
return render_template('home.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
return render_template('login.html', form = form)
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
hashed_pass = bcrypt.generate_password_hash(form.password.data)
new_user = User(username = form.username.data , password = hashed_pass)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('login'))
return render_template('register.html', form = form)
The database connection was successful and i did manage to create the table but, every time I am tryin to register a user it is giving me the following error :
Error :
Traceback (most recent call last):
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1802, in _execute_context
self.dialect.do_execute(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 732, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.StringDataRightTruncation: value too long for type character varying(80)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\flask\app.py", line 2091, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\flask\app.py", line 2076, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\flask\app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\flask\app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\flask\app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "C:\Users\KIIT\Desktop\login\module.py", line 69, in register
db.session.commit()
File "<string>", line 2, in commit
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1431, in commit
self._transaction.commit(_to_root=self.future)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 829, in commit
self._prepare_impl()
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 808, in _prepare_impl
self.session.flush()
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 3363, in flush
self._flush(objects)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 3503, in _flush
transaction.rollback(_capture_exception=True)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__
compat.raise_(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
raise exception
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 3463, in _flush
flush_context.execute()
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\unitofwork.py", line 456, in execute
rec.execute(self)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\unitofwork.py", line 630, in execute
util.preloaded.orm_persistence.save_obj(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\persistence.py", line 244, in save_obj
_emit_insert_statements(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\orm\persistence.py", line 1221, in _emit_insert_statements
result = connection._execute_20(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1614, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1481, in _execute_clauseelement
ret = self._execute_context(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1845, in _execute_context
self._handle_dbapi_exception(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2026, in _handle_dbapi_exception
util.raise_(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
raise exception
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1802, in _execute_context
self.dialect.do_execute(
File "C:\Users\KIIT\Desktop\login\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 732, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.DataError: (psycopg2.errors.StringDataRightTruncation) value too long for type character varying(80)
[SQL: INSERT INTO "user" (username, password) VALUES (%(username)s, %(password)s) RETURNING "user".id]
[parameters: {'username': 'Smit', 'password': b'$2b$12$5.6IXlfuvbnQoF9HyAi0Fe/6J/r4pwsAQLW5i0os0VybmN9fAk/j2'}]
(Background on this error at: https://sqlalche.me/e/14/9h9h)
Upvotes: 0
Views: 217
Reputation: 1
Update :
ok i fixed this error by converting my password with
hashed_pass = hashed_pass.decode("utf-8", "ignore")
before adding it into my db
Upvotes: 0