[英]Why is my function returning the object identity instead of the 'ip' variable?
保存用户注册表单后,我希望保存用户的ip地址,但是我的视图函数不会返回string 。 我改为获取get_client_signup_ip函数的对象标识:
<function get_client_signup_ip at 0x04461810>
forms.py:
from django import forms
from captcha.fields import ReCaptchaField
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpRequest
from django.contrib.gis.geoip2 import GeoIP2
from . import views
from .models import CustomUser
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
captcha = ReCaptchaField()
class Meta:
model = CustomUser # this makes the UserCreateForm always save data to the custom user model
fields = ("username", "email", "password1", "password2")
def save(self, commit=True, request=True): # user object (customuser) form is called to save with commit=true, so it gets teh ip and saves.
user = super(UserCreateForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
user.origin_ip = views.get_client_signup_ip(request)
if commit:
user.save()
return user
views.py
def get_client_signup_ip(request):
g = GeoIP2()
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for
ip2 = '192.227.139.106'
city = g.city(ip2)
else:
ip = request.META.get('REMOTE_ADDR')
ip2 = '192.227.139.106'
city = g.city(ip2)
return ip
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.SignUp.as_view(), name='signup'),
path('signup/', views.get_client_ip, name='signup_ipaddress')
]
我希望在用户的origin_ip字段中看到一个IP地址。 相反,我得到了get_client_sign_up函数的字符串表示形式。
如何获取视图函数get_client_sign_ip以返回字符串?
要获取该值,您需要将其称为views.get_client_signup_ip()
方法而不是views.get_client_signup_ip
。
user.origin_ip = views.get_client_signup_ip(request)
另外,仅从函数获取ip即可,而无需从方法获取HttpResponse(ip)
。
def get_client_signup_ip(request):
..........
return ip
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.