即使使用不同的输入值,Django也会从MongoDB中获得相同的响应

时间:2018-05-02 11:20:54

标签: python django mongodb mongodb-query pymongo

我最近开始使用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!

是由于缓存还是类似的东西?

1 个答案:

答案 0 :(得分:0)

collection.find()返回一个Cursor实例。出于某种原因,您将其转换为字符串并将其与""进行比较。但即使列表为空,str()也不是"",它将类似于"<pymongo.cursor.Cursor object at 0x7f10b69d0c50>"。所以情况永远不会成真。

没有理由转换为字符串或与之比较。相反,请检查匹配的文档数量:

emailCheck = collection.find({"Email":email}).count()
if emailCheck == 0:
    ...