如何解决尽管PythonAnywhere在本地运行,但它在PythonAnywhere上的Django项目有效,但没有任何功能
我刚刚在PythonAnywhere上部署了我的第一个站点,这是一个Craigslist克隆,其搜索功能可以在本地正常工作,但是部署后我只能访问主页,然后由于尝试使用的浏览器而出现两个不同的错误它在。随时在http://matipule.eu.pythonanywhere.com/
上尝试一下这是Safari https://dpaste.com/3ZAJFC4PM
这是Chrome https://imgur.com/PjvLrao
Chrome声称CSRF存在问题,但是我在下面的表格中包含了令牌,然后再次看到,它实际上在本地运行,所以我一无所知。
这是令牌所在的代码。
<form action="{% url 'new_search' %}" method="post">
{% csrf_token %}
<input type="text" name="search" placeholder="search">
<button class="btn waves-effect waves-light" type="submit" name="action">Submit
<i class="material-icons right">send</i>
</button>
</form>
更新 使它起作用的原因是UPDATE 2中接受的答案。
解决方法
通常,搜索请求是使用GET
方法执行的,您甚至不必提及method="GET"
,因为它是默认方法。另外,您的csrf_token
中不需要form
,因为它是一个GET
请求。
如果进行了这些更改,该错误应该消失了,但还会出现另一个错误:
IntegrityError at /new_search/
NOT NULL constraint failed: my_app_search.search
我一无所知,但这似乎与您使用数据库(sqlite3)的逻辑有关
如果您分享一些代码,我可以为您
更新
在views.py
def new_search(request):
# search = request.POST.get('search')
search = request.GET.get('search') # the value should be Not NULL and the 'IntegrityError' should go.
使用GET
而不是POST
,因为搜索请求是通过GET
方法执行的,您会从IntegrityError
错误中摆脱出来。希望这能解决您的问题。
更新2
除上述更改外,我在heroku
上进行了少量更改的情况下将应用程序部署在settings.py
上
..
ALLOWED_HOSTS = ['127.0.0.1','.herokuapp.com'] # HERE
..
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
# HERE added these lines to override the default database config with postgress settings
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
..
然后我运行此命令
heroku addons:create heroku-postgresql:hobby-dev
heroku run python manage.py migrate
这就是我已经做的所有事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。