Спасибо за интересное, что, надеюсь, легко исправить. У меня есть веб-сайт со страницей «Свяжитесь с нами», где пользователь может ввести Имя и т. Д. c. и отправить сообщение. Наряду с этим представлением я собираю данные IP и использую MaxMind для хранения географических данных пользователя c. У меня есть представление, которое вызывает функцию, которая захватывает IP и пингует MaxMind для получения данных. Мой взгляд выглядит так:
class ContactView(CreateView):
model = Contact
template_name = "contact/contact.jinja"
form_class = ContactForm
success_url = "/"
def __init__(self, *args, **kwargs):
self.initial['ip_information'] = get_ip_data(self.request) #<< Call the IP function
def form_valid(self, form):
# Update Slack:
first_name = form.data["first_name"]
last_name = form.data["last_name"]
email = form.data["email"]
phone = form.data["phone"]
ip_information = form.data["ip_information"] # << this is where the IP Data is stored
[ ... ]
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["service_list"] = Service.objects.all().order_by("rank")
context["county_list"] = County.objects.all().order_by("county")
return context
Вызываемая функция, для которой требуется объект запроса, выглядит следующим образом:
def get_ip_data(request):
# Get IP information
# MaxMind Database for geoIP
client = geoip2.webservice.Client(#####, "XXXXXXXXXXXXXXXX")
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
if x_forwarded_for:
client_ip = x_forwarded_for.split(",")[0]
else:
client_ip = request.META.get("REMOTE_ADDR")
ip_data = client.city(client_ip)
return ip_data
К сожалению, ContactView (CreateView), похоже, не дает мне доступ к запросу, который вызвал его, чтобы я мог получить IP. Вместо этого я получаю объект 'ContactView', не имеющий атрибута 'request' error. Такое ощущение, что это прямо там, но я не знаю, как это сделать. Любая помощь будет оценена! Спасибо. :)