diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/2\347\217\255/2\347\217\255_chaos/\347\254\254\345\215\201\345\233\233\345\221\250/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/2\347\217\255/2\347\217\255_chaos/\347\254\254\345\215\201\345\233\233\345\221\250/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/2\347\217\255/2\347\217\255_chaos/\347\254\254\345\215\201\345\233\233\345\221\250/Django\346\250\241\345\236\213\345\261\202.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/2\347\217\255/2\347\217\255_chaos/\347\254\254\345\215\201\345\233\233\345\221\250/Django\346\250\241\345\236\213\345\261\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..fdda19d733e56df5f32e6c0c91317ab84940bd38 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/2\347\217\255/2\347\217\255_chaos/\347\254\254\345\215\201\345\233\233\345\221\250/Django\346\250\241\345\236\213\345\261\202.md" @@ -0,0 +1,225 @@ +## 字段类型 + +- `BooleanField` + +- `IntegerField` + +- `BigIntField` + +- `FloatField` + +- `DecimalField` + +- `CharField` == mysql `varchar` + +- `TextField` + + > 大的文本和图片,推荐存路径(URL 或者 URI) + +- `AutoField` +- `ImageField` +- `EmailField` +- `UUIDField` +- `DateTimeField` + +## 字段约束 + +- primary_key +- null +- blank +- unique +- default +- time + - auto_now_add + - auto_now + +## myblog + +``` +# start app +python manage.py startapp myblog +# add class name in settings.py +``` + +```python +# your models.py +from django.db import models + +class Person(models.Model): + name = models.CharField(max_length=191) + email = models.EmailField() + create_time = models.DateTimeField(auto_now_add=True) + update_time = models.DateTimeField(auto_add=True) + + null_test = models.CharField(max_length=100, null=True) + blank_test = models.CharFiled(max_length=100, blank=True) + + class Meta: + abstract = True + +class Reader(Person): + whether_vip = models.BooleanField(default=False) +``` + +``` +python manage.py makemigrations myblog # 在本地更新数据 +python manage.py migrate # 与数据库同步 +``` + +## 内嵌类 + +- abstract + +- app_label + +- db_table + +- managed + +- ordering + + - `-` 降序排列 + + ordering = ['-order_date'] + + - `?` 随机 + +- indexes + +```python +# 普通继承 +class Reader(Person): + whether_vip = models.BooleanField(default=False) + + class Meta: + db_table = "reader" + managed = False + +# 多重继承 +class Record(student, book): + _id = models.AutoField(primary_key=True, db_column='id') +``` + +## 实例方法 + +- get_lastest_by + +- refresh_from_db + +- 字段验证 # 检验当前格式是否正确 + + clean_fields() + +- 字段唯一性验证 # 去掉可能为空的字段 + + ``` + unique_together = ['name', 'email'] + reader.validate_unique(exclude=['null_test', 'create_time', 'update_time']) + ``` + +## django.setup() + +```python +import os +import django +import random + + +def create_reader(): + for i in range(100): + reader = Reader( + name=f'name_{i}' + email=f'email_{i}@163.com' + null_test=None, + blank_test='', + whether_vip=random.choice([True, False]) + ) + reader.clean_fields(exclude=['null_test']) + reader.save() + + +if __name__ = "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") + django.setup() + from myblog.models import Reader + create_reader() +``` + +## QuerySet + +- Create + + - save + +- Retrieve + + - all() # 获取所有记录 + + ``` + read_array = Reader.objects.all() + ``` + + - get() # 拿到一条数据 + + - filter() # 匹配满足条件的记录 + + - ``` + gte + gt + lte + lt + filter(id__gte=300) + ``` + + - 模糊匹配 + + ``` + __contains + __in + __startswith + __endswith + ``` + + - exclude() # 取反 + +- Update + +- Delete + +## 高级 + +- 事务 + +- raw + + - ``` + >>> for p in Person.objects.raw('SELECT * FROM myapp_person'): + ... print(p) + ``` + +- 手动选择数据库 + + - ``` + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'polls', + 'USER': 'root', + 'PASSWORD': 'wxx33043', + 'HOST': '127.0.0.1', + 'PORT': '3306', + }, + 'users': { + 'NAME': 'user_data', + 'ENGINE': 'django.db.backends.mysql', + 'USER': 'mysql_user', + 'PASSWORD': 'priv4te' + } + } + ``` + + - ``` + Author.objects.using('default').all() + ``` + + \ No newline at end of file