サイトに来ているすべての人のIPアドレスを保存したいと思います。これを行うための最良のアプローチは何ですか。モデルがあるとしましょう
class ip(models.Model):
pub_date = models.DateTimeField('date published')
ip_address = models.GenericIPAddressField()
モデルやビューなど、データベースに保存するコードは、これと同様のユーザーエージェント情報を使用して保存します。
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()
ミドルウェアを使用して@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設定ファイルのミドルウェア
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)
呼び出されているURLまたはビューに関係なくユーザーエージェントを保存したい場合意味がありませんこのコードをビューまたはモデルに記述します。
ミドルウェアを作成してください。 Djangoミドルウェアについての詳細を参照してください: https://docs.djangoproject.com/en/1.6/topics/http/middleware/
カスタムミドルウェアのprocess_request()
メソッドをオーバーライドしてリクエストオブジェクトからのIPアドレスとユーザーエージェントを取得し、IPモデルに保存する
上記のリンクはあなたに何をすべきかについての絶対的な明快さを与えるでしょう。