Django create添加数据后会返回新添加的数据行的queryset对象。从而获取自增id

应用场景:添加新随笔之后,将根据自增id,添加文章详细表和文章标签关系表

一对一关系的外键反向查询:
obj = models.UserInfo.objects.filter(username='sw').first()
print(obj.blog.site)

- 对于Form组件错误信息
{
          __all__: [错误1,错误2]
           user: [错误1,错误2]
           password: [错误1,错误2]
}

# 获取整体错误信息
- 后台
                  print(obj.errors['__all__'])
                   print(obj.errors[NON_FIELD_ERRORS])
- 模板
                   {{ obj.non_field_errors }}

PS: 为某个字段添加异常
                self.add_error('字段名称',错误异常对象)

ajax提交请求时携带CSRF的3种方法:

{% csrf_token %} 在网页中生成一个input标签隐藏起来 其value值为随机字符串,name为csrfmiddlewaretoken
{{ csrf_token }} 直接在网页中生成一个随机字符串显示出来

1     var  csrf=$('input[name="csrfmiddlewaretoken"]').val()
        data:{'csrfmiddlewaretoken':csrf}

2           data:{'csrfmiddlewaretoken':'{{ csrf_token }}'}

3          var token=$.cookie('csrftoken')
            headers:{'X-CSRFToken':token}

博客文章内容:可以加css标签等,在用户上传内容是要过滤script关键字(beautifulsoup)
                         <p>{{ article.content|safe }}</p>

路由匹配:
          url(r'^(?P<site>\w+)/(?P<type>((tag)|(classfiy)|(datetime)))/(?P<typename>\w+-*\w*).html$',views.home,name='filter'),
          给url设置别名可以不用从上到下匹配url,直接找到对应的url正则
          给参数设置别名,可以在后台快速准确的找到不同参数(**kwargs)
           ((tag)|(classfiy)|(datetime))这个正则对应的是3个参数的'或'的关系

#自定义第三张表:自己反向关联article_tag表
                 all_count = models.article.objects.filter(blog=blog,article_tag__tag_id=typename).count()
#通过M2M字段:直接通过m2m字段名从article表跨到tag表里
                  v=models.article.objects.filter(blog=blog,tags__id=typename)

通过年月在数据库查找
方法一:
              all_count = models.article.objects.filter(blog=blog,create_time__startswith=typename).count()
方法二:
               all_count=models.article.objects.filter(blog=blog).extra(where=['strftime("%%Y-%%m",create_time)=%s'],params=[typename,]).count()

通过年月对数据表进行分组:
sqlite数据库:
                   select={'month':'strftime("%%Y-%%m",create_time)'}
                   date_list=models.article.objects.filter(blog=blog).extra(select=select).values('month').annotate(num=Count('aid'))
mysql 数据库
                       select = {'month': 'date_format(create_time,"%%Y-%%m")'}
                       date_list = models.article.objects.filter().extra(select=select).values('month').annotate(num=Count('aid'))

将某操作添加为事务,原子性操作:

from django.db import transaction
with transaction.atomic():

应用:

 1 def up(request):
 2     username=request.session.get('username')
 3     status = {'msg': '', 'type': None}
 4     if username:
 5         obj=models.user.objects.filter(nickname=username).first()
 6         type=request.POST.get('type')
 7
 8         if type=='Y':
 9             id = request.POST.get('id')
10             try:
11                 from django.db import transaction
12                 with transaction.atomic():
13                     models.updown.objects.create(article_id=id,user_id=obj.uid,type=True)
14                     models.article.objects.filter(aid=id).update(up_count=F('up_count')+1)
15                 status['msg']='点赞成功'
16                 status['type']='True'
17                 return HttpResponse(json.dumps(status))
18             except Exception as e:
19                 if models.updown.objects.filter(article_id=id,user_id=obj.uid,type=True).first():
20                     status['msg']='您已经点过赞了'
21                     return HttpResponse(json.dumps(status))
22                 else:
23                     status['msg']='您已经点过踩了,不能点赞了'
24                     return HttpResponse(json.dumps(status))
25         else:
26             id = request.POST.get('id')
27             try:
28                 from django.db import transaction
29                 with transaction.atomic():
30                     models.updown.objects.create(article_id=id,user_id=obj.uid,type=False)
31                     models.article.objects.filter(aid=id).update(dowm_count=F('dowm_count')-1)
32                 status['msg'] = '点踩成功'
33                 status['type'] = 'False'
34                 return HttpResponse(json.dumps(status))
35             except Exception as e:
36                 if models.updown.objects.filter(article_id=id,user_id=obj.uid,type=False).first():
37                     status['msg']='您已经点过踩了'
38                     return HttpResponse(json.dumps(status))
39                 else:
40                     status['msg']='您已经点过赞了,不能点踩了'
41                     return HttpResponse(json.dumps(status))
42     else:
43         status['msg']='请先登录'
44         return HttpResponse(json.dumps(status))

点赞

点赞:ajax请求,
               逻辑:只能点击其中一个且不能取消
               事务性操作:后台更新数据库
               前端:给页面数字加一

删除用户的session(浏览器端)
key=request.session.session_key
request.session.delete(key)

删除用户的session(数据库端和浏览器端)
from django.contrib.sessions.backends.db import SessionStore as DatabaseSession
session = DatabaseSession()
session.clear()
session.delete(session.session_key)
request.session.flush()

应用:用户退出

自定义博客主题:
{% block css %}
<link rel="stylesheet" href="/static/css/theme/{{ dict.blog.theme }}.css">
{% endblock %}

转载于:https://www.cnblogs.com/liuguniang/p/7233149.html

Django 项目一补充相关推荐

  1. Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)

    阅读目录 摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作 ...

  2. uwsgi+nginx部署django项目(有图原理的详细展示的)

    1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2  ...

  3. Django从理论到实战(part3)--创建一个Django项目

    学习笔记,仅供参考 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下. 文章目录 创建一个Django项 ...

  4. python django项目实例_最新Django项目实战-从零开发NB的任务平台python视频学习教程...

    saas导学视频 .mp4 │ 模态框.zip │ ├─day01 │ │ 01 day01 sass项目介绍 .mp4 │ │ 02 day01 sass项目演示 .mp4 │ │ 04 day01 ...

  5. 阿里云运行python项目_荐个人博客开发-06:Nginx + uWSGI + Django项目部署到阿里云服务器运行...

    版本:Python-3.8.1 + Django-2.2 + 阿里云服务器 Ubuntu-16.04 在正式部署前,需要确认几点: 服务器上已经安装相应的 Python MySQL Nginx uWS ...

  6. Django项目在Linux服务器上部署和躺过的坑

    引言 在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台.那么问题来了,既然要在服务器上部署, 就需要准备: 1.linux服务器配置 2.linux安装python环境搭建与配置 3. ...

  7. Django项目实现微博登录

    Django项目实现微博授权登录 前言 前段时间我的老板让我写一个小功能,说现在的用户进入一个新的网站时,很多时候是不想去注册的,最好可以用一些他们本身就用的其他应用的账户来授权登录.本文就是从这个现 ...

  8. django项目学习

    socket编程 scocket 协议位于服务端和客户端之间,b/s架构之间的通信步骤如下图所示.我们web开发做的就是socket服务端的时,通过客户端发来的数据,返回给客户端想要的数据. 简单使用 ...

  9. 阿里云服务器centos7配置Python Django项目

    阿里云服务器centos7配置Python Django项目 2020-3-25更新更换服务器后还原系统+相应配置 2019-12-13更新 Nginx域名绑定 2019-12-12更新 静态文件加载 ...

最新文章

  1. 如何评估一项技术是否值得长期投入
  2. python测试开发django-35.xadmin注册表信息
  3. 打印N个数组整体最大的TopK
  4. 线程间的协作(3)——管道输入/输出流
  5. Mybatis 原始Dao层开发
  6. (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互
  7. shell-最近7天目录
  8. AD19妙用SHIFT+S查找没连的线
  9. 在Linux中修复U盘
  10. TMS320C6678入手准备
  11. 深度学习教程(4) | 深层神经网络(吴恩达·完整版)
  12. 常见的直流稳压电源电容有哪些?及其详细介绍
  13. C语言实训心得体会(精选4篇)
  14. java编写投票功能需求分析
  15. office2013多次输入激活码的问题
  16. 宇宙人工智能计算机程序,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的...
  17. 2017蓝桥杯C/C++B组国赛-瓷砖样式
  18. 赚多多V10自动抢单系统源码_派单连单管理新增设置订单佣金
  19. [渝粤教育] 西南科技大学 律师实务 在线考试复习资料2021版(1)
  20. carla学习笔记(八)

热门文章

  1. 3.6 - Maya Commands: setAttr
  2. 3.4.2 - Operators 3.4.3 division and truncation
  3. linux安装nsenter工具,Docker 使用nsenter工具进入容器的操作
  4. 如何筛选特征?用随机森林(RF)
  5. Auto-ML之自动化特征工程
  6. android 屏幕方向改变 重新测量,android – 扫描时自动更改屏幕方向(使用ZXING库)...
  7. python随机数生成_Python随机数生成模块random详解
  8. java用hashmap_Java集合之HashMap的用法
  9. mysql函数做条件_MySQL语句优化(三):避免条件字段做函数操作
  10. mysql 分页_MySQL 如何优化大分页查询?