2012-06-11 3 views
3

Django и все работает на сервере. Когда пользователь с его/ее локальной машины обращается к приложению, мне нужно сохранить IPV4 и IPV6 с этого локального компьютера в форму.Как получить адрес IPV6 с Django?

Это мнение я использую для сохранения данных:

def t031003form_save(request): 
    form = T031003Form(request.POST or None, request.FILES or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form = form.save(False) 
      form.C003LOGB = datetime.date.today() 
      form.C003LOGD = socket.gethostbyname(socket.gethostname()) 
      form.save() 
      form = T031003Form() 
     else: 
      return HttpResponseRedirect('/erro/') 
    return render_to_response('T031003Form_save.html', {'form': form,}, context_instance=RequestContext(request)) 

Но с этой точки зрения я не уверен, если поле я использую, чтобы сохранить ipv4 выбирает только адрес IPv4 от где запущен Django, который является сервером. Я думаю, он не будет выбирать IPV4-адрес с локальной машины, которая мне нужна.

Большое спасибо заранее за любую помощь, которую вы можете мне дать.

ответ

4

Вы можете получить только IP-адрес, который пользователь использовал для доступа к вашему сайту, то есть IPv4 или IPv6, но не оба. В настоящее время IP-адрес доступен через request.META['REMOTE_ADDR']

Однако, есть довольно простой способ получить как:

  • Создание двух субдоменов, v4.yourdomain.tld и v6.yourdomain.tldкоторые только достижимы через IPv4/6.
  • На вашей фактической странице, сгенерировать случайный маркер, связанный с пользователем и создать тег сценария:

    <script src="//vX.yourdomain.tld/?token=YYY"></script> 
    

    Если пользователь доступ к вашей странице через IPv4, используйте X=6, в противном случае X=4.

  • В вашем коде, который запускается при доступе к одному из поддоменов, зарегистрируйте IP-адрес для пользователя, идентифицированного токеном.
+0

Спасибо! Это то, что мне нужно было знать! :) –

0

Было бы разумно вспомнить, что когда у вас есть IPv4, вы можете получить соответствующий IPv6. IPv4 - это подсеть IPv6, поэтому перевод на v6 довольно прост. Затем вы избавитесь от HTTP-запроса на своем сервере.

Смежные вопросы