pythonassertionerror_关于python:AssertionError:View函数映射正在覆盖现有的端点函数:home – flask...

news/2024/7/4 10:10:14 标签: pythonassertionerror

我正在努力学习http://code.tutsplus.com/tutorials/an-introduction-to-pythons-flask-framework--net-28822

C:\envs\virtalenvs\flask_mini\Scripts\python.exe C:/envs/r2/mini2/intro_to_flask/__init__.py

C:\envs\virtalenvs\flask_mini\lib\site-packages\flask_sqlalchemy\__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.

warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.')

Traceback (most recent call last):

File"C:/envs/r2/mini2/intro_to_flask/__init__.py", line 13, in

from routes import mail

File"C:\envs

2\mini2\intro_to_flask

outes.py", line 9, in

@app.route('/')

File"C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1013, in decorator

self.add_url_rule(rule, endpoint, f, **options)

File"C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 62, in wrapper_func

return f(self, *args, **kwargs)

File"C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 984, in add_url_rule

'existing endpoint function: %s' % endpoint)

AssertionError: View function mapping is overwriting an existing endpoint function: home

routes.py文件是:

from intro_to_flask import app

from flask import render_template, request, flash, session, url_for, redirect

from forms import ContactForm, SignupForm, SigninForm

from flask.ext.mail import Message, Mail

from models import db, User

mail = Mail()

@app.route('/')

def home():

return render_template('home.html')

@app.route('/about')

def about():

return render_template('about.html')

@app.route('/contact', methods=['GET', 'POST'])

def contact():

form = ContactForm()

if request.method == 'POST':

if form.validate() == False:

flash('All fields are required.')

return render_template('contact.html', form=form)

else:

msg = Message(form.subject.data, sender='contact@example.com', recipients=['your_email@example.com'])

msg.body ="""

From: %s

%s

""" % (form.name.data, form.email.data, form.message.data)

mail.send(msg)

return render_template('contact.html', success=True)

elif request.method == 'GET':

return render_template('contact.html', form=form)

@app.route('/signup', methods=['GET', 'POST'])

def signup():

form = SignupForm()

if 'email' in session:

return redirect(url_for('profile'))

if request.method == 'POST':

if form.validate() == False:

return render_template('signup.html', form=form)

else:

newuser = User(form.firstname.data, form.lastname.data, form.email.data, form.password.data)

db.session.add(newuser)

db.session.commit()

session['email'] = newuser.email

return redirect(url_for('profile'))

elif request.method == 'GET':

return render_template('signup.html', form=form)

@app.route('/profile')

def profile():

if 'email' not in session:

return redirect(url_for('signin'))

user = User.query.filter_by(email=session['email']).first()

if user is None:

return redirect(url_for('signin'))

else:

return render_template('profile.html')

@app.route('/signin', methods=['GET', 'POST'])

def signin():

form = SigninForm()

if 'email' in session:

return redirect(url_for('profile'))

if request.method == 'POST':

if form.validate() == False:

return render_template('signin.html', form=form)

else:

session['email'] = form.email.data

return redirect(url_for('profile'))

elif request.method == 'GET':

return render_template('signin.html', form=form)

@app.route('/signout')

def signout():

if 'email' not in session:

return redirect(url_for('signin'))

session.pop('email', None)

return redirect(url_for('home'))

这可能是什么原因造成的?

编辑:

当我把about函数放在第一位时,我得到:

AssertionError: View function mapping is overwriting an existing endpoint function: about

因此,我认为问题可能出在import语句中,或者至少在第一个路由之前:

from intro_to_flask import app

from flask import render_template, request, flash, session, url_for, redirect

from forms import ContactForm, SignupForm, SigninForm

from flask.ext.mail import Mail, Message

from models import db, User

mail = Mail()

编辑2:

from flask import Flask

app = Flask(__name__)

app.secret_key = 'development key'

app.config["MAIL_SERVER"] ="smtp.gmail.com"

app.config["MAIL_PORT"] = 465

app.config["MAIL_USE_SSL"] = True

app.config["MAIL_USERNAME"] = 'contact@example.com'

app.config["MAIL_PASSWORD"] = 'your-password'

from routes import mail

mail.init_app(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost/development'

from models import db

db.init_app(app)

import intro_to_flask.routes

我不知道这是否相关,但是你的home()函数中显然有一个缩进问题。

@尼古拉斯,我们通常建议使用4个空格,对吗?他把2和4个空格混在一起。

感谢您指出这一点,我已经将格式改为4个空格(见上文),但错误没有改变。

你的__init__.py文件里有什么?

请参见编辑2

此错误是因为您是循环导入应用程序(在routes.py中导入应用程序,在app中导入routes.py)这种模式不起作用,也不正确。在flask中,您可以将整个应用程序编写成单个文件,也可以使用flask蓝图以模块化方式制作。http://flask.pocoo.org/docs/0.10/蓝图/

应用程序可以在单个文件中工作:

from flask import render_template, request, flash, session, url_for, redirect

from forms import ContactForm, SignupForm, SigninForm

from flask.ext.mail import Message, Mail

from models import db, User

from flask import Flask

app = Flask(__name__)

app.secret_key = 'development key'

app.config["MAIL_SERVER"] ="smtp.gmail.com"

app.config["MAIL_PORT"] = 465

app.config["MAIL_USE_SSL"] = True

app.config["MAIL_USERNAME"] = 'contact@example.com'

app.config["MAIL_PASSWORD"] = 'your-password'

mail = Mail()

mail.init_app(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost/development'

from models import db

db.init_app(app)

@app.route('/')

def home():

return render_template('home.html')

@app.route('/about')

def about():

return render_template('about.html')

@app.route('/contact', methods=['GET', 'POST'])

def contact():

form = ContactForm()

if request.method == 'POST':

if form.validate() == False:

flash('All fields are required.')

return render_template('contact.html', form=form)

else:

msg = Message(form.subject.data, sender='contact@example.com', recipients=['your_email@example.com'])

msg.body ="""

From: %s

%s

""" % (form.name.data, form.email.data, form.message.data)

mail.send(msg)

return render_template('contact.html', success=True)

elif request.method == 'GET':

return render_template('contact.html', form=form)

@app.route('/signup', methods=['GET', 'POST'])

def signup():

form = SignupForm()

if 'email' in session:

return redirect(url_for('profile'))

if request.method == 'POST':

if form.validate() == False:

return render_template('signup.html', form=form)

else:

newuser = User(form.firstname.data, form.lastname.data, form.email.data, form.password.data)

db.session.add(newuser)

db.session.commit()

session['email'] = newuser.email

return redirect(url_for('profile'))

elif request.method == 'GET':

return render_template('signup.html', form=form)

@app.route('/profile')

def profile():

if 'email' not in session:

return redirect(url_for('signin'))

user = User.query.filter_by(email=session['email']).first()

if user is None:

return redirect(url_for('signin'))

else:

return render_template('profile.html')

@app.route('/signin', methods=['GET', 'POST'])

def signin():

form = SigninForm()

if 'email' in session:

return redirect(url_for('profile'))

if request.method == 'POST':

if form.validate() == False:

return render_template('signin.html', form=form)

else:

session['email'] = form.email.data

return redirect(url_for('profile'))

elif request.method == 'GET':

return render_template('signin.html', form=form)

@app.route('/signout')

def signout():

if 'email' not in session:

return redirect(url_for('signin'))

session.pop('email', None)

return redirect(url_for('home'))

app.run()

嗨,伊特玛德,谢谢你看。我要运行什么文件?我要删除init.py文件吗?

创建一个包含所有代码的文件,然后您可以运行它。

谢谢你,我在in it.py和run routes.py中对所有内容都进行了评论,结果成功了!

伊特玛德,你对部署到Heroku有什么建议吗?我遇到问题stackoverflow.com/questions/34966616/…


http://www.niftyadmin.cn/n/1384738.html

相关文章

快元宵节了才写的新年计划

嗯,本来打算的是过年期间少休息几天就好,写完了挂的题之后学校一直也没挂新题,自己又懒,巴拉巴拉。发现了一个规律,越快开学了越想玩,越玩电脑玩手机反而越空虚,每天晚上都会觉得自己一天虚度了…

ZH奶酪:通过CSS自定义HTML中hr样式-颜色-形状

修改颜色&#xff0c;线条形状&#xff0c;粗细等... CSS代码&#xff1a; .zh_hr{border:3px solid rgba(255, 255, 255, 0.50);margin-bottom: 2px;margin-top: 2px } HTML代码&#xff1a; <hr class"zh_hr"/> 转载于:https://www.cnblogs.com/CheeseZH/p/4…

055 PHP知识点总结五

40、nosql和Mysql的区别也即非关系型数据库和关系型数据库。 目前世界上主流的存储系统大部分还是采用了关系型数据库&#xff0c;其主要有一下优点&#xff1a; 1.事务处理—保持数据的一致性&#xff1b; 2.由于以标准化为前提&#xff0c;数据更新的开销很小&#xff08;相同…

使用图像和多媒体

2019独角兽企业重金招聘Python工程师标准>>> <embed src"kongzhi.swf" width"564" height"287"></embed> <img src"image/fangjian.jpg" width"160" height"180" hspace"5" …

spring-security中的csrf防御机制(跨域请求伪造)

什么是csrf&#xff1f; csrf又称跨域请求伪造&#xff0c;攻击方通过伪造用户请求访问受信任站点。CSRF这种攻击方式在2000年已经被国外的安全人员提出&#xff0c;但在国内&#xff0c;直到06年才开始被关注&#xff0c;08年&#xff0c;国内外的多个大型社区和交互网站分别爆…

jquery 查找表格里的input_jquery列表文字input文本框输入关键词查找表单代码

特效描述&#xff1a;列表文字表单 文本框输入 关键词查找表单。代码结构1. 引入CSS2. 引入JS3. HTML代码jQuery关键词查找元素高亮代码伟大的吉萨金字塔The Great Pyramid of Giza (also known as the Pyramid of Khufu or the Pyramid of Cheops) is the oldest and largest …

Azure迁移之路--(1)本地虚拟机预算评估

Azure迁移服务评估本地工作负载以迁移到Azure。 该服务评估内部部署机器的迁移适合性&#xff0c;以Azure为基础&#xff0c;基于性能的大小&#xff0c;并提供在Azure中运行本地计算机的成本估算。 如果您正在考虑升级和迁移迁移&#xff0c;或者处于迁移的早期评估阶段&#…

056 PHP知识点总结六

49.Include和require的区别 require 外部文件如果不存在&#xff0c;会报错&#xff0c;后面的代码不会执行 Include 外部文件如果不存在&#xff0c;会报错&#xff0c;后面的代码继续执行include_once()和require_once()在加载之前要判断是否已经导入 50、索引的建立与使用索…