文章目录
- 首先是版本,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文档](https://docs.djangoproject.com/en/2.0/ref/urls/#path))
- django 提示 migrate gets error “table already exists”的解决办法
- django-crontab的用法
- django_redis的用法
- django.db.utils.ProgrammingError: (1146, u"Table'' doesn't exist")解决办法
- django获取前端传过来的参数。
- mysql严格模式Strict Mode说明
- [django字段属性类型](https://blog.csdn.net/fgf00/article/details/53678205/)
- django model中多个字段联合唯一约束
- django model 中关于blank和null的补充说明
- [Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as
- django允许外部访问
- Django ORM查询get和filter比较
- django model主键自增问题。
- python requests处理返回的json格式数据。
- [django 查询语句](https://www.cnblogs.com/rinka/p/django_make_queries_anout_built-in_lookups.html)
- django template的配置及其使用
- django 增加数据
- django querySet api 文档
- django serializers 高级用法
- django querySert对象转换字典对象
- django 获取用户ip
- django 使用静态图片的方法
- django 报错:Received “ValueError: Found wrong number (0) of constraints for …” during Django migration的解决办法
- 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的用法
-
需要进行安装 pip install django-crontab
-
在工程中使用django-crontab. settings文件里面的INSTALLED_APPS里面添加django_crontab.
-
django-crontab配置。
- 定时函数
CRONJOBS = ( ('*/1 * * * *', '你的app名.定时函数所在的py文件名.定时函数名'), # 第一种的意思就是每一分钟执行一次你的定时函数 ('0 0 1 * *', '你的app名.定时函数所在的py文件名.定时函数名', '> 输出文件路径和名称'),) # 第二种时定时函数输出的内容到指定文件(如果该路径或文件不存在将会自动创建)
- 定时命令
CRONJOBS = ( ('10 12 * * *', 'django.core.management.call_command', ['要执行的命令']),) # 意思是在12点10分执行命令
配置完上面必须手动添加定时任务才能真正启动。
4.定时任务的操作
当你添加了或者修改的定时任务,只需执行命令1即可
如果你想删除定时任务,请执行命令2
django_redis的用法
- pip3 install django-redis
- 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")解决办法
- 删除了表,但是没有删除对应的migrations里面的文件。比如__pycache__, 0001_instial.py
- 数据库里面有相应的记录,也需要删除。 django_migrations表里面,对应的字段需要进行删除。
- 重新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说明
- 开启是在mysql安装目录下的my.cnf,在sql_mode中加入STRICT_TRANS_TABLES 则表示开启严格模式,如果没有加入则表示非严格模式。修改后需要重启mysql.
- 举例: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, 修改为当前的索引即可。
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 这样的字符串。