寻找django框架的根目录:
ipython
In [1]: import django
In [2]: django
找到django框架的根目录,进入它,比如:
cd /usr/local/lib/python3.11/site-packages/django
从错误页面找到一段特征代码,然后搜索它寻找错误页面模板:
ag 'seeing this error because you have'
找到后:
编辑500页面
vi views/templates/technical_500.html
在</body>前加入如下代码:
<script>
...
问题描述:
liveReload 等工具可以在修改文件后实时刷新页面,但在django开发中,修改模板后有时候自动刷新无效,页面还是被缓存了,无论怎么设置debug模式都白搭,django的模板系统就算在开发环境还是有零点几秒的缓存的,按下面的步骤可以彻底关闭它:
1、打开django模块的 template/loaders/cached.py 文件,比如
vi /usr/local/lib/python3.11/site-packages/django/template/loaders/cached.py
2、找到 get_template 方法,在方法的最前面加入一行:
...
使用 get_FOO_display 方法
详见:https://doc.bccnsoft.com/docs/django-docs-4.0-en/ref/models/instances.html#django.db.models.Model.get_FOO_display
网站升级到 django4.1.3 后,连接老版本的数据库(mysql5.5)的时候,时不时出现错误:
File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 207, in check_database_version_supported
raise NotSupportedError(
django.db.utils.NotSupportedError: MySQL 5.7 or later is required (found 5.5.53).
解决...
假设是一个model,名为Attach
class Attach(models.Model):
file = FileField(upload_to="files/%Y/%m/%d")
保存上传文件,这个最简单:
def upload(request):
attach = Attach()
attach.file = request.FILES.get('file')
attach.save()
保存网络上采集的文件:
import requests
from django.core.files.base import Cont...
是:
urllib.parse.quote
而不是 urllib.parse.urlencode
标准的方法是:
>>> os.path.splitext('thefile.jpg')[1]
'.jpg'
这样获得的是带点号的后坠,如果不要点号呢?当然可以在结果上继续处理
>>> os.path.splitext('thefile.jpg')[1][1:]
'jpg'
不过有更简便的方法,使用字符串的split方法
>>> 'thefile.jpg'.split('.')[-1]
'jpg'
有强迫症,看见python没有end关键字,就像将倾的大厦,向一边倾斜,缺少对称之美。于是总想着给python加个end。在十几年前听说韩国有程序员给python(整容😁)用注释的方式加end,比如:
if True:
print("hello")
#end
这个思路不错,但是注释前面的#号看着还是不舒服。
又想到用定义一个end变量:
if True:
print("hello")
end = ''
让end等于空字符串,这样前面不用带一个#号了,但后面拖着个小尾巴,还是不舒服。
既然注释和变量都不完美,那么用...
可能是由于内存限制,对大文件只能替换前面的一部分,可以使用re.compile突破这种限制
比如:
re.sub("abc", "123", largeText, re.S|re.I)
可以改成:
match = re.compile("abc", re.S|re.I)
match.sub("123", largeText)
在settings.json加入如下配置:
"python.analysis.indexing": true
在uwsgi.xml加入下面一项
<disable-logging>true</disable-logging>
假设startapp创建的app为app1
在app1中创建一个helpers模块,加入如下代码:
from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch import receiver
def bind_delete_signal(model):
@receiver(pre_delete, sender=model)
def pre_model_delete(sender, **kwargs):...
有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面或后面需要是特定的内容,但我们又不想要前面或后面的这个特定的内容,(这里的特定内容是指字符串,如果是字符可以用^排除),这时候就需要零宽断言的帮助了。所谓零宽断言,简单来说就是匹配一个位置,这个位置满足某个正则,但是不纳入匹配结果的,所以叫“零宽”,而且这个位置的前面或后面需要满足某种正则。
正预测先行断言
断言自身出现的位置的后面能匹配表达式exp
语法格式
(?=exp)
...
bccn_shell进入docker,按向上键一次就会出现 ./manage.py shell ,如果不出现继续按。出现后按回车进入控制台。
from news.models import Article
for article in Article.objects.filter(public=False).order_by('id')[0:1000]:
article.delete()
一次删1000篇
Django诞生于2003年,到现在16年了,一直在稳妥的推进,没飚版本号,在rails如日中天的时候没借鉴rails,一直坚持自己的风格,向前兼容也做得很好。这点比python好,python从2到3的变动好像失去了方向。
pickle.dumps(unicode_draft) #不建议
pickle.dumps(unicode_draft.encode('utf-8')) #建议
直接pickle.dumps(unicode_draft)的时候,保存的是这种形式:
V<ul>\u5982\u4f55\u89e3\u6790
pickle.dumps(utf8_str_draft)的时候,保存的是这种形式:
S'\xe5\xad\x99\xe9\x91\xa'
一个V,一个S,S后面跟的是单引号包裹的字符串。
-------------------------...
有时候用pip 安装 uwsgi因为各种依赖问题装不上,可以用apt-get来装。
apt-get install uwsgi
apt-get install uwsgi-plugin-python
不过uwsgi.xml需要加一项
<plugins>python</plugins>
当migrations越来越多的时候执行 makemigrations 和 migrate 就会越来越慢,可以考虑对其瘦身(减少migrations文件的数量),有两种方法:
1、squashmigrations(官方推荐)
此方法将一个app中的多个migration文件合并为一个,详见 http://doc.bccnsoft.com/docs/django-docs-1.7-en/topics/migrations.html#squashing-migrations
2、手动删除migrations文件
步骤:
...
今天执行djangod的合并迁移的时候运行了:
./manage.py squashmigrations contenttypes 0002
然后再执行迁移命令就出现错误提示:
django.db.migrations.loader.BadMigrationError: Migration 0001_squashed_0002_remove_content_type_name in app contenttypes has no Migration class
然后删除了网站所有migrations目录下的文件,清空了django_...
网上的一些文章都是介绍只对某个IP显示的,下面的设置是IP无关的(用户账号有关)
1、安装
sudo pip install django-debug-toolbar
2、在 settings.py 的 MIDDLEWARE_CLASSES 项中加入
'debug_toolbar.middleware.DebugToolbarMiddleware',
3、在 settings.py 中加入
def custom_show_toolbar(reques...