web-dev-qa-db-ja.com

IPアドレスをデータベースに保存する方法とDjango admin

サイトに来ているすべての人のIPアドレスを保存したいと思います。これを行うための最良のアプローチは何ですか。モデルがあるとしましょう

class ip(models.Model):
    pub_date = models.DateTimeField('date published')
    ip_address = models.GenericIPAddressField()

モデルやビューなど、データベースに保存するコードは、これと同様のユーザーエージェント情報を使用して保存します。

Django-admin-ip

22
Radek

Views.pyで:

views.py:

    ....

    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

    if x_forwarded_for:
        ipaddress = x_forwarded_for.split(',')[-1].strip()
    else:
        ipaddress = request.META.get('REMOTE_ADDR')
    get_ip= ip() #imported class from model
    get_ip.ip_address= ipaddress
    get_ip.pub_date = datetime.date.today() #import datetime
    get_ip.save()
19
ruddra

ミドルウェアを使用して@Sahil Kalraから例を挙げましたが、

モデル:

class IpAddress(models.Model):
    pub_date = models.DateTimeField('date published')
    ip_address = models. GenericIPAddressField()

ミドルウェア:

import datetime

class SaveIpAddressMiddleware(object):
    """
        Save the Ip address if does not exist
    """
    def process_request(self, request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[-1].strip()
        else:
            ip = request.META.get('REMOTE_ADDR')
        try:
            IpAddress.objects.get(ip_address=ip)
        except IpAddress.DoesNotExist:             #-----Here My Edit
              ip_address = IpAddress(ip_address=ip, pub_date=datetime.datetime.now())
              ip_address.save()
            return None

ミドルウェアをプロジェクトフォルダのどこかに保存し、設定ファイルにこのミドルウェアを追加します。ここにリファレンスがあります 設定方法Django設定ファイルのミドルウェア

8
dhana

IPアドレスを非常に簡単にviews.pyにフェッチできます。

 def get_ip_address(request):
 "" "requestobjectを使用してクライアントマシンのIPアドレスを取得します" "" 
 x_forwarded_for = request.META.get( 'HTTP_X_FORWARDED_FOR')
 if x_forwarded_for:
 ip = x_forwarded_for.split( '、')[0] 
 else:
 ip = request.META.get( 'REMOTE_ADDR')###クライアントマシンの実際のIPアドレス
 return ip 
 
 
 def home(request):
 "" "あなたのviesがhttpリクエストを処理します" " 「
 ip_address = get_ip_address(request)
5
Prashant

呼び出されているURLまたはビューに関係なくユーザーエージェントを保存したい場合意味がありませんこのコードをビューまたはモデルに記述します。

ミドルウェアを作成してください。 Djangoミドルウェアについての詳細を参照してください: https://docs.djangoproject.com/en/1.6/topics/http/middleware/

カスタムミドルウェアのprocess_request()メソッドをオーバーライドしてリクエストオブジェクトからのIPアドレスとユーザーエージェントを取得し、IPモデルに保存する

上記のリンクはあなたに何をすべきかについての絶対的な明快さを与えるでしょう。

3
Sahil kalra