我最近开始使用Django。
我使用PyMongo模块[pip3 install pymongo]集成了MongoDB。
我的问题:
即使数据库更新后,Django也会给我相同的数据。每当我进行一些操纵;比如将用户输入的电子邮件与数据库中现有电子邮件ID的电子邮件进行比较,我每次都得到相同的结果。
看起来结果已缓存。
Urls.py :
from django.urls import path
from . import views
urlpatterns = [
path('', views.homepage),
path('register/', views.register),
]
Views.py
from django.shortcuts import render
from pymongo import MongoClient
from django import http
def homepage(request):
return (render(request, 'index.html'))
def register(request):
if request.method == 'POST':
name = request.POST['name']
email = request.POST['email']
password = request.POST['password']
client = MongoClient('mongodb://my_ip:27017/')
db = client.trainingdb
collection = db.data
emailCheck = str(collection.find({"Email":email}))
if emailCheck == "":
dbData = {
'Name': name,
'Email': email,
'Password': password
}
collection.insert_one(dbData)
return http.HttpResponse("Success!")
else:
return http.HttpResponse("Email exists in database!")
else:
return render(request, 'register.html')
homepage
方法适用于索引页面或主页面。 register
方法用于注册页面。
在这里,我试图检查用户输入的电子邮件ID是否预先存在于数据库中。
测试用例:
我第一次输入了已经在数据库中的电子邮件ID,我得到了预期的结果:Email exists in database!
。
但是第二次,我输入的电子邮件ID不在数据库中;但我得到了同样的旧结果:Email exists in database!
。
是由于缓存还是类似的东西?
答案 0 :(得分:0)
collection.find()
返回一个Cursor实例。出于某种原因,您将其转换为字符串并将其与""
进行比较。但即使列表为空,str()
也不是""
,它将类似于"<pymongo.cursor.Cursor object at 0x7f10b69d0c50>"
。所以情况永远不会成真。
没有理由转换为字符串或与之比较。相反,请检查匹配的文档数量:
emailCheck = collection.find({"Email":email}).count()
if emailCheck == 0:
...