django 学习笔记

Posted 高中国流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 学习笔记相关的知识,希望对你有一定的参考价值。

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="[email protected]")
 
# 方法 2
twz = Author(name="WeizhongTu", email="[email protected]")
twz.save()
 
# 方法 3
twz = Author()
twz.name="WeizhongTu"
twz.email="[email protected]"
twz.save()
 
# 方法 4,首先尝试获取,不存在就创建,可以防止重复
Author.objects.get_or_create(name="WeizhongTu", email="[email protected]")
# 返回值(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="[email protected]"
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="[email protected]")
Author.objects.filter(name__contains="Wei").exclude(email="[email protected]")
# 找出名称含有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()

互联网彩票 模式  代理发行销售

  

以上是关于django 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Django学习笔记

django学习笔记1

Django 从入门到忘记学习笔记

Django学习笔记(上)

Django后端开发学习笔记URL调度器

Django后端开发学习笔记URL调度器