django相关报错知识整理

文章目录

首先是版本,django2.1的版本是不支持mysql5.5的。django只支持5.5以上版本的。

django2.1支持python3.5, python3.6, python3.7.Django2.0是支持python3.4的最后一个版本。所以老的linux自带的python3.4是不能用的。

url 和path的区别(django path文档)

django path比较好的文档
url是django 1.*版本的写法,可以用正则。而path是django 2.0以上的版本,不需要正则就能实现很多功能。

django 提示 migrate gets error “table already exists”的解决办法

If you have the table created in the database, you can run
python manage.py migrate --fake <appname>
Mark migrations as run without actually running them

django-crontab的用法

  1. 需要进行安装 pip install django-crontab

  2. 在工程中使用django-crontab. settings文件里面的INSTALLED_APPS里面添加django_crontab.

  3. django-crontab配置。

    • 定时函数
    CRONJOBS = (
    ('*/1 * * * *', '你的app名.定时函数所在的py文件名.定时函数名'),  # 第一种的意思就是每一分钟执行一次你的定时函数
    ('0   0 1 * *', '你的app名.定时函数所在的py文件名.定时函数名', '> 输出文件路径和名称'),)   # 第二种时定时函数输出的内容到指定文件(如果该路径或文件不存在将会自动创建)
    
    • 定时命令
    CRONJOBS = (
    ('10 12 * * *', 'django.core.management.call_command', ['要执行的命令']),) # 意思是在12点10分执行命令
    

    配置完上面必须手动添加定时任务才能真正启动。
    4.定时任务的操作

    1. python manage.py crontab add  添加定时任务
    2. python manage.py crontab remove 清除定时任务
    3. python manage.py crontab show 显示定时任务

当你添加了或者修改的定时任务,只需执行命令1即可
如果你想删除定时任务,请执行命令2

django_redis的用法

  1. pip3 install django-redis
  2. settings.py的配置 参考文档
# redis配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}
            # "PASSWORD": "密码",
        }
    }
}

3.用法:

cache.set('a','b')

django.db.utils.ProgrammingError: (1146, u"Table’’ doesn’t exist")解决办法

  1. 删除了表,但是没有删除对应的migrations里面的文件。比如__pycache__, 0001_instial.py
  2. 数据库里面有相应的记录,也需要删除。 django_migrations表里面,对应的字段需要进行删除。
  3. 重新python manage.py makemigrations && python manage.py migrate

django获取前端传过来的参数。

1.如果是get请求的话,是request.GET.get(“username”, “”)
2.如果是post请求的话,是request.body || request.POST.get(“username”, “”)
3.如果是获取meta头信息的话,是request.META[“PATH_INFO”]

mysql严格模式Strict Mode说明

  1. 开启是在mysql安装目录下的my.cnf,在sql_mode中加入STRICT_TRANS_TABLES 则表示开启严格模式,如果没有加入则表示非严格模式。修改后需要重启mysql.
  2. 举例:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

django字段属性类型

django model中多个字段联合唯一约束

class MyModel(models.Model):
  field1 = models.CharField(max_length=50)
  field2 = models.CharField(max_length=50)

  class Meta:
    unique_together = ('field1', 'field2',)

对应mysql中的sql,类似如下语句:create unique index index_name on tablename(field1, field2);

django model 中关于blank和null的补充说明

blank为True时,字段可以为空。设置为False时,字段时必须填写的。
null为True时,django用Null来存储空值。 DateTimeField字段可以为空,需要将blank,null均设置为True.

一句话概括

null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。
blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体

[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as

关于mysql的[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key错误原因

是因为,表中一个字段被设置为自动增长,但是另一个字段又被设置为主键导致冲突

django允许外部访问

python manage.py runserver 0.0.0.0:9000

Django ORM查询get和filter比较

get如果获取不到数据的时候时会报错的,如果获取的数据是多于1条的也是会报错的。
而filter在获取不到数据的时候是返回一个[]

django model主键自增问题。

prize_id = models.IntegerField(primary_key=True, db_column='FId', default=1)

这样写save之后,表里的数据会update而不是insert. 正确的写法应该是

prize_id = models.IntegerField(primary_key=True, db_column=‘FId’)
定位在 default=1 处。 主键自增字段不能设置default值.

python requests处理返回的json格式数据。

r.json()

django 查询语句

django template的配置及其使用

首先得有BASE_DIR,这个应该指向项目的根目录。
然后在Template里面加上"DIRS":[os.path.join(BASE_DIR, “templates”)] 如果是元祖的话,是需要加,的
https://www.cnblogs.com/gregoryli/p/7699352.html

django 增加数据

obj = models.UserInfo(user='yangmv', pwd="123456")
obj.save()
或者
dic = {"user": 'yangmv', 'pwd': '123456'
models.UserInfo.objects.create(**dic)
或者
models.UserInfo.objects.create(user='yangmv',pwd='123456')

删除
model.UserInfo.objects.filter(user='yangmv').delete()

改
models.UserInfo.objects.filter(user='yangmv').update(pwd='342')
或者
obj = models.UserInfo.objects.get(user='yangmv')
obj.pwd='520'
obj.save()

django querySet api 文档

https://www.cnblogs.com/linxiyue/p/4040262.html

django serializers 高级用法

https://www.jianshu.com/p/5f6cd57dac6f

django querySert对象转换字典对象

>>> from django.contrib.auth.models import User  
>>> from django.forms.models import model_to_dict  
>>> u = User.objects.get(id=1)  
>>> u_dict = model_to_dict(u)  
>>> type(u)  
<class 'django.contrib.auth.models.User'>  
>>> type(u_dict)  
<type 'dict'>  

django 获取用户ip

if request.META.has_key('HTTP_X_FORWARDED_FOR'):
    ip =  request.META['HTTP_X_FORWARDED_FOR']
else:
    ip = request.META['REMOTE_ADDR']

django 使用静态图片的方法

首先,这里我的静态页面是放在最外边的,和app,以及项目目录是同级的。
第二,需要修改settings.py 的文件。

STATIC_ROOT = os.path.join(BASE_DIR, 'ShopManTool/static')
STATIC_URL = '/static/'
STATICFILES_DIRS=[
    os.path.join(BASE_DIR, 'static')
]

因为我这里使用的是debug模式,上面的代码中,static_root是不需要开启的。这里只需要使用static_url 以及staticfiles_dirs即可。其中staticfiles_dirs配置的就是static所在目录。

使用方式:

这里我有一个图片,位置在templates下的static/images/gold_vip.png. 这里我要使用这个图片,在template对应的htmL里面,我需要这样引用

{% load static %}
 <img src="{% static 'images/gold_vip.png' %}" >
 这样的话,图片就正常显示了

django 报错:Received “ValueError: Found wrong number (0) of constraints for …” during Django migration的解决办法

这个是因为索引发生了变化导致的,解决办法是修改原始文件中第一次migrate生成的UniqueTogether, 修改为当前的索引即可。

参考:https://stackoverflow.com/questions/41623515/received-valueerror-found-wrong-number-0-of-constraints-for-during-djan

django 查询指定时间段内的数据

这里设置的时间字段是created_at。
...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))
这里的start_date 和 end_date 是 类似 2019-03-27 18:30:00 这样的字符串。

猜你喜欢

转载自blog.csdn.net/funnyPython/article/details/88804266