django 学习笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
python manage.py makemigrations
python manage.py migrate
获取对象有以下方法:
    Person.objects.all()
    Person.objects.all()[:10]  
    Person.objects.get(name=name)
    Person.objects.filter(name="abc")
    Person.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
    Person.objects.filter(name__contains="abc")  # 名称中包含 "abc"的人
    Person.objects.filter(name__icontains="abc")  #名称中包含 "abc",且abc不区分大小写
    Person.objects.filter(name__regex="^abc")  # 正则表达式查询
    Person.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写
    Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person对象
    Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名称含有abc, 但是排除年龄是23岁的
 
1. QuerySet 创建对象的方法
# 方法 1
Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com")
  
# 方法 2
twz = Author(name="WeizhongTu", email="tuweizhong@163.com")
twz.save()
  
# 方法 3
twz = Author()
twz.name="WeizhongTu"
twz.email="tuweizhong@163.com"
twz.save()
  
# 方法 4,首先尝试获取,不存在就创建,可以防止重复
Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")
# 返回值(object, True/False)
备注:前三种方法返回的都是对应的 object,最后一种方法返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回 False
 
3. 删除符合条件的结果
Person.objects.filter(name__contains="abc").delete() # 删除 名称中包含 "abc"的人
如果写成
people = Person.objects.filter(name__contains="abc")
people.delete()
效果也是一样的,Django实际只执行一条 SQL 语句
得到满足条件的结果,然后 delete 就可以(危险操作,正式场合操作务必谨慎)
 
4. 更新某个内容
(1) 批量更新,适用于 .all()  .filter()  .exclude() 等后面 (危险操作,正式场合操作务必谨慎)
 
(2) 单个 object 更新,适合于 .get(), get_or_create(), update_or_create() 等得到的 obj,和新建很类似
twz = Author.objects.get(name="WeizhongTu")
twz.name="WeizhongTu"
twz.email="tuweizhong@163.com"
twz.save()  # 最后不要忘了保存!!!
 
6. QuerySet 是可以用pickle序列化到硬盘再读取出来的
>>> import pickle
>>> query = pickle.loads(s)     # Assuming 's' is the pickled string.
>>> qs = MyModel.objects.all()
>>> qs.query = query            # Restore the original 'query'.
 
7. QuerySet 查询结果排序
Author.objects.all().order_by('name')
Author.objects.all().order_by('-name') # 在 column name 前加一个负号,可以实现倒序
 
8. QuerySet 支持链式查询
Author.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com")
Author.objects.filter(name__contains="Wei").exclude(email="tuweizhong@163.com")
# 找出名称含有abc, 但是排除年龄是23岁的
Person.objects.filter(name__contains="abc").exclude(age=23)
 
9. QuerySet 不支持负索引
Person.objects.all()[:10] 切片操作,前10条
Person.objects.all()[-10:] 会报错!!!
  
# 1. 使用 reverse() 解决
Person.objects.all().reverse()[:2] # 最后两条
Person.objects.all().reverse()[0] # 最后一条
  
# 2. 使用 order_by,在栏目名(column name)前加一个负号
Author.objects.order_by('-id')[:20] # id最大的20条
 
10. QuerySet 重复的问题,使用 .distinct() 去重
一般的情况下,QuerySet 中不会出来重复的,重复是很罕见的,但是当跨越多张表进行检索后,结果并到一起,可能会出来重复的值(我最近就遇到过这样的问题)
qs1 = Pathway.objects.filter(label__name='x')
qs2 = Pathway.objects.filter(reaction__name='A + B >> C')
qs3 = Pathway.objects.filter(inputer__name='WeizhongTu')
  
# 合并到一起
qs = qs1 | qs2 | qs3
这个时候就有可能出现重复的
  
# 去重方法
qs = qs.distinct()
 
假设一篇文章只有一个作者(Author),
一个作者可以有多篇文章(Article),
一篇文章可以有多个标签(Tag)
 
 
import os
django.contrib.auth
 
 
request.session[key] = value
request.session.get(key, default=None)
del request.session[key]
arr.append()
arr = []
arr1 + arr2
%s % name
%d
 
# Ajax
<!DOCTYPE html>
<html>
<body>
<p>请输入两个数字</p>
<form action="/add/" method="get">
    a: <input type="text" id="a" name="a"> <br>
    b: <input type="text" id="b" name="b"> <br>
    <p>result: <span id='result'></span></p>
    <button type="button" id='sum'>提交</button>
</form>
  
<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(document).ready(function(){
      $("#sum").click(function(){
        var a = $("#a").val();
        var b = $("#b").val();
  
        $.get("/add/",{'a':a,'b':b}, function(ret){
            $('#result').html(ret)
        })
      });
    });
</script>
</body>
</html>
 
 
# CSRF cross-site request forgery
 
 
# Python 类型
bool   int  float  str  list  tuple  set  dict
reduce
if-elif-else
if __name__ == "__main__":
 
*args 元组
**args 字典键值对
lambda s:s*n
 
直接给发钱
class open:
    def __init__(self, fillPath):
 
import sys
open('', 'w')
import os
os.system
rename remove linesep  isfile
 
# 微信验证
博客系统   
培训机构 页面  
ID  title descript city address
111  公司名称   详情经历描述  城市  具体地址
 
搜素功能  关键词 模糊搜索  按照城市   公司名称
 
数据提交 评论 跟评 点赞 可信度 浏览量
广告 展示  列表页 详情页: 图片 无视频
分页
详情页 有标题  摘要 描述内容 发布时间 评论
编辑器
 
 
ORM Forms CSRF Migrations Validators Caching Sites Testing Templates Admin Comments Dev Server Auth I18N Authorization
 
 
# settings.py
把英文改为中文
LANGUAGE_CODE = 'zh-hans'
 
把国际时区改为中国时区
TIME_ZONE = 'Asia/Shanghai'
 
 
TEMPLATES=[
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    }
]
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'imook',
        'USER': 'root',
        'PASSWORD': 'zxcv1234',
        'HOST': 'localhost',
        'PORT': '3306',     
          'OPTIONS': {
            'autocommit': True,
         },
    }
}
最关键的一点,在站点的__init__.py文件中
 
import pymysql
pymysql.install_as_MySQLdb()
 
互联网彩票 模式  代理发行销售

  

posted @   高中国流  阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示