Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialNitesh Kumar
1,055 PointsGetting builtins.TypeError TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
I am doing this work on my PC, everything is working fine but when i try to post, i get this builtins.TypeError. TypeError: init() takes from 1 to 2 positional arguments but 3 were given
I don't understand what's wrong with my code. I have checked the code again and again, but din't found the mistake.
Please help me.
This is what i am getting in browser when i click on Post to post something.
Traceback (most recent call last):
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "c:\tools\python3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\tools\python3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "c:\tools\python3\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "c:\tools\python3\lib\site-packages\flask_login.py", line 792, in decorated_view
return func(*args, **kwargs)
File "c:\Users\Nitesh Sharma\OneDrive\Documents\My Stuff\My Web Development Stuff\Learning Flask\Flask Social\app.py", line 91, in post
if form.validate_on_submit():
File "c:\tools\python3\lib\site-packages\flask_wtf\form.py", line 166, in validate_on_submit
return self.is_submitted() and self.validate()
File "c:\tools\python3\lib\site-packages\wtforms\form.py", line 310, in validate
return super(Form, self).validate(extra)
File "c:\tools\python3\lib\site-packages\wtforms\form.py", line 152, in validate
if not field.validate(self, extra):
File "c:\tools\python3\lib\site-packages\wtforms\fields\core.py", line 204, in validate
stop_validation = self._run_validation_chain(form, chain)
File "c:\tools\python3\lib\site-packages\wtforms\fields\core.py", line 224, in _run_validation_chain
validator(form, self)
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
[MOD: added ```python formatting -cf]
2 Answers
Nitesh Kumar
1,055 PointsThanks Chris. Actually i found the problem. In forms.py i forget to put parenthesis after validator 'DataRequired'.
Chris Freeman
Treehouse Moderator 68,457 PointsGreat! Glad to help!
Nitesh Kumar
1,055 PointsYaa Sure,
from flask import (Flask, g, render_template, flash, redirect, url_for)
from flask.ext.bcrypt import check_password_hash
from flask.ext.login import (LoginManager, login_user, logout_user,
login_required, current_user)
import forms
import models
DEBUG = True
PORT = 8000
HOST = '0.0.0.0'
app = Flask(__name__)
app.secret_key = 'asdnafnj#46sjsnvd(*$43sfjkndkjvnskb6441531@#$$6sddf'
"""here secret_key is a random string of alphanumerics"""
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
@login_manager.user_loader
def load_user(userid):
try:
return models.User.get(models.User.id == userid)
except models.DoesNotExist:
return None
@app.before_request
def before_request():
"""Connect to database before each request
g is a global object, passed around all time in flask, used to setup things which
we wanna have available everywhere.
"""
g.db = models.DATABASE
g.db.connect()
g.user = current_user
@app.after_request
def after_request(response):
"""close all database connection after each request"""
g.db.close()
return response
@app.route('/register', methods = ('GET','POST'))
def register():
form = forms.RegisterForm()
if form.validate_on_submit():
flash("Congrats, Registered Successfully!", "success")
models.User.create_user(
username = form.username.data,
email = form.email.data,
password = form.password.data
)
return redirect(url_for('index'))
return render_template('register.html', form = form)
@app.route('/login', methods = ('GET', 'POST'))
def login():
form = forms.LoginForm()
if form.validate_on_submit():
try:
user = models.User.get(models.User.email == form.email.data)
except models.DoesNotExist:
flash("Your email or password does not match", "error")
else:
if check_password_hash(user.password, form.password.data):
login_user(user)
"""Creating a session on user's browser"""
flash("You have been logged in", "success")
return redirect(url_for('index'))
else:
flash("Your email or password does not match", "error")
return render_template('login.html', form = form)
@app.route('/logout')
@login_required
def logout():
logout_user()
flash("You have been logged out.")
return redirect(url_for('login'))
@app.route('/new_post', methods = ('GET', 'POST'))
@login_required
def post():
form = forms.PostForm()
if form.validate_on_submit():
models.Post.create(user = g.user.id,
content = form.content.data.strip())
flash("Message Posted: Thanks!", "success")
return redirect(url_for('index'))
return render_template('post.html', form = form)
@app.route('/')
def index():
stream = models.Post.select().limit(100)
return render_template('stream.html', stream = stream)
@app.route('/stream')
@app.route('/stream/<username>')
def stream(username = None):
template = 'stream.html'
if username and username != current_user.username:
user = models.User.select().where(models.User.username**username).get()
stream = user.posts.limit(100)
else:
stream = current_user.get_stream().limit(100)
user = current_user
if username:
template = 'user_stream.html'
return render_template(template, stream = stream, user = user)
if __name__ == '__main__':
models.initialize()
try:
models.User.create_user(
username = 'niteshsharma',
email = 'nbsharma@outlook.com',
password = 'password',
admin = True
)
except ValueError:
pass
app.run(debug=DEBUG,host = HOST, port = PORT)
Chris Freeman
Treehouse Moderator 68,457 PointsGreat. Can you also post your models and forms?
Chris Freeman
Treehouse Moderator 68,457 PointsChris Freeman
Treehouse Moderator 68,457 PointsCan you post you app.py? An object is being created with the wrong number of parameters.