Как вызывать пользовательские функции из models.py django
Я создаю пользовательскую функцию для получения данных из mongodb
и хочу увидеть данные, как они выглядят до манипуляции.
Допустим, у меня есть функция, запрашивающая данные из mongodb
Вот как выглядит мой models.py
from bson import json_util
from django.db import models
from django.http import JsonResponse
from pymongo import MongoClient
from bson.json_util import dumps
from bson.json_util import loads
import json
import pymongo
def data_pull(request):
request_data = request.POST.get('Hello', None)
if __name__ == "__main__":
data_pull(request)
для запуска models.py я делаю python models.py
из командной строки, но получаю такую ошибку
NameError: имя 'request' не определено
По сути, я хочу протестировать эту data_pull
функцию из models.py и посмотреть, как выглядят данные или даже вызов. Как я могу передать этот вызов request
в функцию и увидеть вывод из командной строки?
Эта часть вашего кода кажется странной:
if __name__ == "__main__":
data_pull(request)
Обычно, если вы передаете request
в качестве аргумента, вы должны вызвать функцию data_pull()
из представления и передать запрос в качестве аргумента в вызове функции.
Вы не можете просто использовать if __name__ == "__main__":
и ожидать появления объекта запроса, вам нужно создать его самостоятельно или использовать объект запроса, который создается представлениями (движок django заботится об этом по большей части).
Больше информации в документации: https://docs.djangoproject.com/en/3.2/ref/request-response/#quick-overview
EDIT: если вам нужен объект HttpRequest
, это обычно означает, что вам нужны данные, которые отправляются из веб-браузера (данные, которые движок django помещает внутрь request.GET
, request.POST
и других). Это означает, что вам, вероятно, следует вызывать функцию data_pull()
из представления.
Например, этот код в вашем файле 'views' (код из https://docs.djangoproject.com/en/3.2/topics/class-based-views/intro/#using-class-based-views):
from django.http import HttpResponse
from django.views import View
# since you function is declared in 'models', we import it here
from .models import data_pull
class MyView(View):
def get(self, request):
# call the function passing request as argument
data_pull(request)
return HttpResponse('result')