cnblog项目--20190309
时间:2019-03-18
本文章向大家介绍cnblog项目--20190309,主要包括cnblog项目--20190309使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第一个真正意义的Django项目 !
预计时间5天 20190309--20190314
目标:学会Django的使用,理解模块关系!
querset 相当于一个存放列表的字典
day1 20190309
1.1 引入环境 ,配置static静态文件,并引入 bootstrap下的dist文件和 jquery
STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
这样下次引入时,会一直使用路径别名 /static/ ,需注意的是项目启动时是以manage.py文件为原始目录来查找路径,而自己测试html时是以该文件的路径为原始路径。
创建了超级用户 yeteng/yeteng123
1.2 创建和删除用户
#生成新用户,修改状态表
newuser=User.objects.create_user(username=username,password=password,email=email)
# # 删除用户的操作
# deluser = User.objects.get(id=2)
# deluser.delete()
newuser=User.objects.create_user(username=username,password=password,email=email)
# # 删除用户的操作
# deluser = User.objects.get(id=2)
# deluser.delete()
1.3 bootstrap中的居左和居右
1、pull-left和pull-right
2、text-left、text-center和text-right
1.4 三个简单实用的用于 DOM 操作的 jQuery 方法:
- text() - 设置或返回所选元素的文本内容 --其他标签
- html() - 设置或返回所选元素的内容(包括 HTML 标记) --其他标签
- val() - 设置或返回表单字段的值 -- 对应input textarea输入标签
day2 20190313
2.1 modles.py 中定义表class时的blank与null 区别
blank:
当blank=True时,说明此处的数据可以不填,默认情况下为False,也就意味着默认情况下,所输入的数据不得空,blank是和页面表单 有关,在页面需要输入参数的时候,如果在models里面定义了blank=True时,那么这个参数是可以不填写的,如果是默认的话,如果没有填写,则会提示错误。
null:
当null=True时,也就是说如果没有填写数据,此处用NULL来储存空值,默认的是null=False。
总结:blank主要是用在CharField, TextField,这两个字符型字段可以用空字符穿来储存空值。
null主要是用在IntegerField,DateField, DateTimeField,这几个字段不接受空字符串,所以在使用时,必须将blank和null同时赋值为True。
顺便一提,在设置BooleanField为空时,可以使用NullBooleanField型字段。
2.2 在通过AbstractUser类创建用户类时,可添加自定义字段,同时必须注意的是继承该类必须在setting.py中声明使用,一旦指定了新的认证系统使用的表,必须重新在数据库中创建该表,不能使用原来的auth_user表
# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "APP名.UserInfo"
AUTH_USER_MODEL = "APP名.UserInfo"
django.db.migrations.exceptions.InconsistentMigrationHistory
查看了网上其他博客后:大多建议删除 django_migrations表并删除migration目录下的0001_initial.py(并不能解决问题):
因为当你重新迁移是,并不能成功的映射新的数据库表:
这里只有删除main下除sqlite_master和sqlite_sequence表下的其他表然后重新执行
python manage.py makemigrations
python manage.py migrate
才能迁移成功:
Django中删除和重建数据库中关于models类的映射数据库表的正确方法:
在Django中删除models类的映射数据库表需要在models.py中剪切或删除对应的models类:然后在控制台中执行:
python manage.py makemigrations(Django会重新对照你的models类与数据库中的映射表,如果你的model类被删除,则Django会生成一个删除迁移)
python manage.py migrate(执行删除迁移,删除数据库中对应的model映射表)
原文:https://blog.csdn.net/follow_sunshine/article/details/81485222
day3 20190314
在 admin界面可以看到注册的表,需配置 admin.py文件
from django.contrib import admin
from blog import models
# Register your models here.
# 注册后可在 前端admin直接查看
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Article)
admin.site.register(models.ArticleDetail)
admin.site.register(models.Tag)
admin.site.register(models.Article2Tag)
from blog import models
# Register your models here.
# 注册后可在 前端admin直接查看
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Article)
admin.site.register(models.ArticleDetail)
admin.site.register(models.Tag)
admin.site.register(models.Article2Tag)
<!-- 注意html这里取一个列表的第几个值,直接 .数字就可以,如 list.1 ;list[1]会报错 -->
django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '[0]' from 'cate[0]'
annotate 会将查询结果全部字段作为group by 内容 ,括号里的函数作为select对象.
例如: models.values("AAA").annotate.(C=count(artid)).values("BBB")
对应SQL: select "AAA|BBB的查询字段",count(artid) as C from tab1,tab2 ..
where xxxxxxxxxx
group by "AAA|BBB的查询字段"
有一个坑,如果 "AAA|BBB的查询字段" 包括了 artid,那么分组结果往往不是你想要的,注意剔除掉
day4 20190315
关键字:extends block
day5 20190316
关于Django中修改js css文件但浏览器无法及时与之改变的问题
浏览器——> 设置——> 高级——>清除浏览数据 ——> 清除缓存和图片,即可
事物:transaction 不用前端序列化的json:JsonResponse
def diggit(request):
from django.db import transaction
from django.db.models import F
from blog import models
print("diggit---------------11111")
if request.is_ajax():
article_id=request.POST.get("article_id")
print(request.user.username,article_id,"-----")
user=request.user
article=models.Article.objects.filter(articleid=article_id)
art_state={"state":False}
# 在点赞表中加一个 用户和文章的记录,同时文章表的点赞数+1,这两个是事物
try:
with transaction.atomic():
# 方法一
models.ArticleUpDown.objects.create(user_id=user.userid,article_id=article_id)
# 方法二
# models.ArticleUpDown.objects.create(user=user,article=article[0])
article.update(up_count=F("up_count")+1)
art_state={"state":True}
except:
pass
# django 下的json,在前端不需要反序列化
from django.http import JsonResponse
from django.db import transaction
from django.db.models import F
from blog import models
print("diggit---------------11111")
if request.is_ajax():
article_id=request.POST.get("article_id")
print(request.user.username,article_id,"-----")
user=request.user
article=models.Article.objects.filter(articleid=article_id)
art_state={"state":False}
# 在点赞表中加一个 用户和文章的记录,同时文章表的点赞数+1,这两个是事物
try:
with transaction.atomic():
# 方法一
models.ArticleUpDown.objects.create(user_id=user.userid,article_id=article_id)
# 方法二
# models.ArticleUpDown.objects.create(user=user,article=article[0])
article.update(up_count=F("up_count")+1)
art_state={"state":True}
except:
pass
# django 下的json,在前端不需要反序列化
from django.http import JsonResponse
return JsonResponse(art_state)
点击跳转到其他盒子的方法:
方法一HTML5中a标签的锚点使用 通过id跳转
<a href="#d3">我在找OA系统</a><br/>
方法二,js下id获取焦点方法 $("#d3").focus()
day6 20190317
事件委派 jquery下的on方法(原生js语法不一样):
on(事件类型,标签<.class,#id,标签>,委派的方法):
好处:1.如果子标签较多,不用一个个for循环加事件,消耗内存,增加程序处理的个数
2.新添加的子标签将会直接获得事件,如博客添加的新评论,直接将事件放在父级,新加的评论ajax到页面马上拥有相关事件。
1 $(function(){
2 $("#lists").on("click","li",function(event){
3 var target = $(event.target);
4 target.css("background-color","red");
5 })
6 })
2 $("#lists").on("click","li",function(event){
3 var target = $(event.target);
4 target.css("background-color","red");
5 })
6 })
--------------------end! --------------------------------------------cnblog项目--20190309
- 如何使用C语言的面向对象
- 《Redis设计与实现》读书笔记(三十) ——Redis集群节点复制与故障转移
- 掌握一点儿统计学
- 高通HAL层之bmp18x.cpp
- Oracle 数据库之最:你见过最高的 SQL Version 是多少?
- Android 子activity关闭 向父activity传值
- 《Redis设计与实现》读书笔记(三十一) ——Redis集群消息类型
- 统计学中的相关性分析
- 《Redis设计与实现》读书笔记(三十二) ——Redis事务设计与实现
- 收藏一个简洁的PHP可逆加密函数
- 《Redis设计与实现》读书笔记(三十二) ——Redis集发布订阅设计与实现
- Android点击EditText文本框之外任何地方隐藏键盘的解决办法
- Spark 1.4为DataFrame新增的统计与数学函数
- 《Redis设计与实现》读书笔记(三十三) ——Redis排序命令sort的实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python判断字符串是否包含特定子串的7种方法
- 用后台开发的逻辑理念学习VUE
- 进程管理-Linux每日一练(6)
- AkShare-能源数据-碳排放-国际行情
- Linux 【Shell脚本经典案例】
- 【Vulnhub】SecTalks: BNE0x00 - Minotaur
- Spring Boot扩展机制 - Spring Factories
- Google Analytics上实施透明度和用户意见征求框架
- 浅析鸿蒙 JavaScript GUI 技术栈
- C#串口操作类,包括串口读写操作
- Go by Example 中文版: 时间
- Go by Example 中文版: 时间戳
- Day14.模块&包
- 关于 JavaScript 错误处理的最完整指南(下半部)
- 踩坑记录 | Android 逆向之如何处理 Kali Nat 模式无法上网?