A quick reference for django the test project is in rest-framework-test repository
- How can I see the raw SQL queries Django is running? 查看queryset的sql语句 使用connection.queries
DEBUG模式
from django.db import connection
connection.queires
from djabgo.db import reset_queries
reset_queries() # 清空query
或者使用print(queryset.query)
queryset.query.sql_with_params()
stackoverflow链接
讨论各种主题和工具 at a fairly high level, 提供一些背景知识和解释
./queryset.md
./advanced.md
./pagination.md
Django The Model Layer 数据库model层 官网
- Field Options
unique, blank, null的用法,歧义解释 - Field Types
- Relationship fields
- Instance methods 实例方法
python manage.py makemigrations --empty yourappname
from django.db import migrations
def combine_names(apps, schema_editor):
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
dependencies = [
("yourappname", "0001_initial"),
]
operations = [
migrations.RunPython(combine_names, reverse_code=migrations.RunPython.noop)
]
- Model Instance
- Other
./views.md
./request_response.md
- attribute
- errors 具体的报错信息
f.errors {'sender': ['Enter a valid email address.'], 'subject': ['This field is required.']}
- method
clean()
其实就是调用了clean_data
- FileField
./settings.md
-
- Configuring applications
from django.apps import AppConfig class MyAppConfig(AppConfig): verbose_name = "自己的名字" 注意修改后要在 app/__init__.py 里面设置 default_app_config = 'app.apps.MyAppConfig'
-
Exceptions
Django Core Exceptions
from django.core.exceptions import *
- ValidationError()
- ObjectDoesNotExist 因为model.DoesNotExist是继承了这个Exception, 所以可以用一个ObjectDoesNotExist来判断多个错误
from django.core.exceptions import ObjectDoesNotExist try: e = Entry.objects.get(id=3) b = Blog.objects.get(id=1) except ObjectDoesNotExist: print("Either the entry or blog doesn't exist.")
- model.DoesNotExist
from django.core.exceptions import ObjectDoesNotExist
- MultipleObjectsReturned
- PermissionDenied()
./available_commands.md
./customcommand.md
from django.core.management import call_command
:maxdepth: 5
./test测试.md
./uwsgi部署.md
./gunicorn.md
- signal绑定的情况下
- 如果是runserver的进程, term的时候会直接崩溃
- 如果是gunicorn的进程, term的时候也会直接崩溃
- 没有signal绑定的情况下
- 如果是gunicorn的进程, 会先启动新的进程, term的时候会等待最后一个请求完成
form表单提交的csrf数据: csrfmiddlewaretoken="wfjdaefefewajfklajsf"
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def view(request):
return HttpResponse('csrf')
- Time zones 时区
./timezone时区.md
from django.utils.encoding import python_2_unicode_compatible
from __future__ import unicode_literals
./logging.md
from django.core import serializers
serializers.serializer("json", Iterable[Model], indent=4) # json字符串
Authentication Permission
from django.core.cache import cache
from django.core.cache import caches
cache.set('foo', 'bar', timeout=3600)
cache = caches['thirdparty']
cache.set('foo', 'bar', timeout=3600*24*60)
cache.get('cache_list', []) # 没有默认值就返回None
from django.core.pagiator import Paginator
objects = Model.objects.all()
p = Paginator(objects, 2) # 每页显示2个元素
p.count # 获取一共多少个元素
p.num_pages # 获取页数
objectslist = p.page(n) # 获取第n页
objectslist.has_previous | has_next # 判断是否有下一页
objectslist.previous_page_number | next_page_number # 获取上一页或下一页的页码
objectslist.number # 当前页码
./validator表单验证.md
- The ContentType Model
- app_label: application的名字.如果有层import,就是最后的路径
- model: model的name
- name: 人看的name
- ContentType的方法
- [ ]
- model_class(): 返回contenttype对应的model
class ContentType(models.Model): def model_class(self): try: return apps.get_model(self.app_label, self.model) except LookupError: return None
- ContentTypeManager
- [ ]
- get_for_model(model)
ContentType.objects.get_for_model(User)
- [ ]
- 生成随即的字符串
from django.utils.crypto import get_random_string
get_random_string(length=6)