簡體   English   中英

為什么我的函數返回對象標識而不是'ip'變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM