Django模型中定义auto_now=True 更新规则,更新文章时间应用, 获取ip
django的orm关于更新数据库的方法有update和save两种方法。
前提在模型中设置了auto_now=True时间戳属性,为了方便数据库自动更新时间,而使用update更新的记录,数据库中并没有自动更新,达到我的需求。
auto_now=True自动更新,有一个条件,就是要通过django的model层。
如create或是save方法。
如果是filter之后update方法,则直接调用的是sql,不会通过model层,所以不会自动更新此时间。所以使用save方法更新才能达到我的需求。
例如
我定义数据库
updated = models.DateTimeField(auto_now=True)
这个save()每次访问时候total_views+1会自动更新时间
article.total_views += 1
article.save()
后来改成了,为什么加article = Article.objects.get(id=id), 因为更新后进入文章详情并没有看到total_views+1,刷新才看到,最易再查询一次数据库,但是增加了一次查询,等以后学多了说不定可以有效解决这个问题
Article.objects.filter(id=id).update(id=id, total_views=article.total_views + 1)
article = Article.objects.get(id=id)
from django.conf import settings
from django.core.mail import send_mail
def get_user_ip(request):
"""获取用户ip,有可能服务器会500"""
if 'HTTP_X_FORWARDED_FOR' in request.META: # 获取 ip
client_ip = request.META['HTTP_X_FORWARDED_FOR']
client_ip = client_ip.split(",")[0] # 所以这里是真实的 ip
flag = "真实ip"
else:
client_ip = request.META['REMOTE_ADDR'] # 这里获得代理 ip
flag = "代理ip"
text = flag + ":ip:"+client_ip
send_mail('主题', text, settings.EMAIL_HOST_USER, ["534640040@qq.com"])
# 👆获取ip地址
本文作者: 永生
本文链接: https://yys.zone/detail/?id=141
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)