全栈学习笔记

全栈学习(OB)

1. 模板语言 if条件语句
2. Form表单提交,页面会刷新
3. Ajax提交,页面不刷新
4. js实现页面跳转
5. 两种准备更改页面数据的方式
模态对话框
  • 数据少
  • 少量输入框
  • used for: 登录
新url方式
  • 数据量大
  • 操作多
  • used for: 博客编辑
6.js阻止默认事件发生
7.location.reload() 页面刷新
8.HttpResponse(json.dumps(xxxx))
9.JSON.parse()
10.jQury阻止默认事件发生
11.placeholder=“xxxx”

​ 对话框内部引导半显示文字

12.老师表与班级表(多对多)

在这里插入图片描述

添加新老师,前端输入的老师名称通过 request.POST.get(xxx) 获得;

添加新老师,前端所选的多个班级通过 request.POST.getlist(xxxx) 获得。

13.SqlHelper封装(连接数据库–数据库操作–关闭连接)
class SqlHelper(object):
	def __init__(self):
		self.connect()
        
	def connect(self)
		self.conn = pymysql.connect(host='127.0.0.1',
                                    port=3306,
                                    user='root',
                                    passwd='',
                                    db='my_db')
		self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
	def get_one(self, sql, args)
    	pass
	def get_lsit(self, sql, args)
    	pass
    def modify(self, sql, args)
    	pass
    def multi_modify(self, sql, args)
    	pass
    
    def close()
    	self.cursor.close()
    	self.conn.close()
14. Ajax发送数据 traditional = True 我们可以通过设置traditional 为true阻止深度序列化,

例如:前端传的数据为class_list = [1, 2, 3], traditional默认为False时,后端通过request.POST.getlist获取不到数据, 当设置为True时,才可以获取到[1, 2, 3]

15.js里判断一个元素在不在列表 (python里有 in ,js里没有。)

eg:判断 2 在不在v = [1, 2, 3], 用 v.indexof(2)

16. CSS中的 响应式

@media(xxx){XXXXX

}

应用: (1)导航条; (2)栅格

17. Django母版

母板 里放所有页面共用的东西

子板 继承母板, 可自定义当前页面私有的东西

{% block xx %}

{% endblock %}

18.设置过期时间
redis 设置过期时间
  • EXPIRE key 秒数 # 多少秒后过期

    session保存在数据库,通过 request.session.set_expiry(value) 设置过期时间

cookie中过期时间的设置有两种:
  • max_age = 10 # 10秒后过期
  • expires = 日期 # 到某个日期过期
19.明文cookie与签名cookie
明文cookie的设置与获取

obj.set_cookie(...)

request.COOKIE.get(...)

签名cookie的设置与获取

obj.set_signed_cookie(... ...)

request.get_signed_cookie(... ...)

在这里插入图片描述

20.CSS 中 hover

当鼠标移动到xx样式的标签上时,其子标签**.g**应用以下属性

.xx:hover .g{ YYYY

}

21. CharField必须设置 max_length 不然会报错
22.Django ORM 数据库操作
查询

models.UserInfo.objects.all() ==> 返回QuerySet对象 [obj_1, obj_2], 类似列表,每个对象代表数据表一行数据,可以用 for obj in [obj_1, obj_2] 遍历出每一个对象, 再用obj.id、obj.name … 获取每个字段的具体数据。

models.UserInfo.objects.filter(id=2) ==> 过滤() # 注意这时得到的结果还是QuerySet对象

models.UserInfo.object.filter(id=2).first() ==> # 这时得到的结果就是obj 对象了,

models.UserInfo.objects.filter(id__gt=2) ==> _ _gt过滤得到大于某一值的 - -lt 过滤得到小于某一值的

增加

models.UserInfo.objects.create(name=‘赵六’) ==> 增加一行数据name字段为 ‘赵六’

更改

models.UserInfo.objects.filter(id=2).update(name=‘李四’) ==> 将id=2这一行的name (张三) 改为 ‘李四’

删除

models.UserInfo.objects.filter(id=2).delete() ==> 删除id=2的一行数据

============================================================

其他
v = models.UserInfo.objects.filter(id__gt=2).value('ut_id').annotate(xxxx=Count(id)).filter(xxxx__gt=2)

print(v.query)

结果为:

SELECT "app01_userifo"."ut_id", COUNT(“app01_userinfo"."id" AS "xxxx" FROM "app01_userinfo" WHERE "app01_userinfo"."id" > 2 GROUP BY "app01_userinfo"."ut_id" HAVING COUNT("app01_userinfo"."id") > 2
F
Q
23. Django orm 帮咱们解决不了问题时,还可以使用:extra、 原生sql、 raw
extra

在这里插入图片描述

在这里插入图片描述

24.路由请求过来,通过反射来找到相应函数,getattr, 一般不会通过if…else来做。
25.外键关联时的操作

在这里插入图片描述

26.数据获取多个数据时
注意对象可以直接用  . 来进行跨表操作,而字典和元组对象要在查询时用  __ 来进行跨表操作
1.得到的QuerySet里面是对象形式 [obj1, obj2, obj3]

在这里插入图片描述

2.得到的querySet对象是字典格式 [{id:1, name:‘zs’}, {id:2, name:‘ls’}, {id:3, name:‘ww’}]

在这里插入图片描述

3.得到的QuerySet对象里面是元组格式 [(1, ‘zs’), (2, ‘ls’), (3, ‘ww’)]

在这里插入图片描述

27. django原生分页只适合做 上一页 下一页,如果显示页码会所有页码都显示出来,要想只显示当前页码和前后几页,还需要做二次开发。当然可以不用django里的分页,来自定分页组件。

在这里插入图片描述

在此之后,还得再做处理(1.为方便调用,2.为显示页码) ,效果如下图:

在这里插入图片描述

28. 写原生SQL语句选择连接的数据库

from django.db import connection, connections

cursor = connection.cursor() # 默认 connection = defaul t 连接“default”数据库

cursor = connections(‘db2’).cursor() # 对应settings里面的数据库配置,此项是连接 “db2” 数据库

29. .all().first() 和 .get()

v = models.UserInfo.objects.all().first() # 有数据 返回一条,没有 则返回None

v = models.UserInfo.objects.get() # 有数据 返回一条, 没有 会报错!

30. django中从数据库提取某一字段下的值为空的数据时

不能用 filter(age=None)

得用 filter(age__isnull=True)

31.多对多时所需的 第三张关系表的定义方式

在这里插入图片描述

32. Django 中 csrf 防护的开启与禁用
全局禁用:

注释掉 # ‘django.middleware.csrf.CsrfViewMiddleware’

局部禁用:(全局开启情况下)

在要禁用的方法上加装饰器 @csrf_exempt

局部使用:(全局禁用情况下)

对于FBV 在要使用的方法上加装饰器 @csrf_protect

对于CBV 必须再类上加 @method_decorator(csrf_protect,name=‘dispatch’),而不能直接装饰类中定义的方法。name=‘ ’可以填类中的某个方法例如:post

33. 数据库建表时,的字段设置

例如: email = models.EmailField( null=True, default = ’11111‘, unique=True, blank=True, verbose_name=‘邮箱’)

其中null=True是告诉数据库这个字段可以为空,而blank=True是告诉Django admin 这个空可以不填

verbose_name 是Django admin 显示的这一字段 行前面的名称。

34. Session 可在Django项目 settings.py 文件中添加的配置

以下是默认设置:

在这里插入图片描述

35. Session 可以配置存储位置(session数据放在什么地方)

可存在1.数据库(默认)、2.文件、3.缓存、4.缓存+数据库(优先从缓存中取,没有就到数据库取)、5cookie中

36. Django生命周期
客户端输入地址,请求会先进过uwsgi,然后到达web框架,中间件从上到下执行,然后经过url路由匹配找到视图,执行视图函数,返回响应时再经过中间件,这次是从下到上执行,然后返回给客户端。

中间件的process_request 不能有返回值,如果某一个中间件有返回值,则程序不会再经过下面中间件,会直接再该中间件返回,(自行脑补图片,**注意:**Django1.7、1.8版本中间件返回会从最底部中间件开始返回,而不是从当前的中间件返回。);

中间件的process_response 必须有返回值,这样才能返回给客户端呀。

37. django 的 Form 表单验证,is_valid()

继承关系:

Field <== { IntegerFiled | CharField } <== { EmailField | URLField | … }

在这里插入图片描述

=======================

在这里插入图片描述

========================

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值