1:电脑上有Python3.5和Python2.7。默认为3.5,如何在不修改环境变量(如果可以修改环境变量那就省事了)的情况下将模块安装到2.7下。
如安装requess:需要在dos窗口下进入python2.7的安装目录,之后在dos窗口(当前目录的dos)下输入python.exe-m pip install requests 点击回车键后,即可让python2.7的pip执行安装requests模块的命令。
2:报错缺少MySQLdb 模块(注意大小写最好正确)
不能单单增加MySQLdb模块,因为其依赖于MySQLclient,所以直接安装MySQLclient,这个模块后附带安装MySQLdb。
注意报缺少 _mysql模块也是安装MySQLclient。
3:Python查看模块安装位置
先输入:python-v (注意是小写)
再输入:importmoduleName (moduleName对应模块,如django,mysqlclient)
ps:python-V (查看Python版本信息)
4:Django运行访问项目出现的问题:DisallowedHostat / Invalid HTTP_HOST header
解决:修改setting.py 文件:
ALLOWED_HOSTS= ['*'] #在这里请求的host添加了*
5:Django中models.CharField(null=True,blank=True)
null是针对数据库而言,如果 null=True,表示数据库的该字段可以为空。
blank是针对表单的,如果blank=True,表示你的表单填写该字段的时候可以不填
6:django中两字段使用同一模型作为外键,添加反向引用符related_name
follower= models.ForeignKey(User, related_name=‘follower‘)
followed= models.ForeignKey(User, related_name=‘followed‘)
7:Django中在模板文件中使用{%url ‘apollo:app_add’ %}]
注意这里的app_add是函数名,不是通过url映射过去的。
8:Django中获得指定列的数据两种方式
如User中User.objects.values(‘id’)或者User.objects.values_list(‘id’)
9:Python中str和int比较的话不会相等,应该转换
int→ str , str(12)
str→ int , int(‘12’)
10:UncaughtSyntaxError: Unexpected identifier
这个错误八成是JS中上一行少了一个,逗号
11:需求描述:在html的{%%}中得到django返回的一个列表firstLayer的长度
{%if “{{firstLayer|length}}” > 1 %}
{%endif %}
或者
{%if “{{firstLayer.length}}” > 1 %}
{%endif %}
以上两种都可以
12:
Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。
子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。
Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程:
多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。
13:Python中None和 Null(空字符串)的区别
None:表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。
Null:是一個空字符,’’
在判断是均是false。
14:django中post请求中由于缺少csrf出错,
如果是在表单中只需要添加一行:
{%csrf_token %}
如果是ajax请求中,则需要在请求参数中添加’csrfmiddlewaretoken’:csrftoken。
并且写一个getCookie(name)的方法来得到csrftoken
15:django中url的总结
url(r’app-list’,views.getList, name = ‘app_list’)
在<ahref=”app-list” />, url中都用直接映射
在<ahref=”{% url’apollo:app_list’ %}”>在这里用反向解析
在render中使用.html直接渲染网页
在HttpResponseRedirect()中使用url
16:django中
#限制返回的数据 相当于 SQL中的 OFFSET0 LIMIT 2;
Test.objects.order_by('name')[0:2]
但是要注意的是这里其实用的是切片原理,于是如果offset不为0,那么limit应该加上offset的值,如
Test.objects.order_by('name')[5:10]相当于mysql中的offset5 limit 5;
17:django中实现distinct查找
User.objects.values(‘sex’).distinct().order_by(‘sex’)
注意的是必须使用values(),和distinct(),以及order_by()
18:django实现模糊查询
例子:AntiCrawler.objects.filter(type=type).filter(record__icontains=request.GET[‘record’]).filter(is_delete=request.GET[‘is_del’])
其中icontains表示不区分大小写,contains则表示区分大小写
算式中为两条下划线。连接点.表示and
19:django实现时间段查询
AntiCrawler.objects.filter(tiem__range(date_from,date_to))
其中date_from, date_to是datetime.datetime.now()这种形式
可以参考:https://www.cnblogs.com/linjiqin/p/3821914.html,总结得很详细
20:django报错multivaluedictkeyerror说明在这里这个值可能不存在例如
request.GET[‘sortName’]这里的可能并没有sortName这个参数
21:时区问题
在setting.py中
USE_TZ设置为True默认使用系统时间
USE_TZ设置为False,TIME_ZONE= 'Asia/Shanghai',则会使用上海时间
22:django中filter和get对没有匹配的处理
filter在数据库中没有匹配到结果会返回一个空数组,所以用len()判断是否取得数据
get在数据库中没有匹配到结果会报错。需要try… except
22:values(),values_list()
values返回是字典列表;
values_list返回的是元组列表,
values_list加上flat=true,返回值列表
如可能用到的Config.objects.values_list(‘id’,flat=true).order_by(‘-id’)[0:1]
上面这个功能得到最新插入的一条数据的id
23:Python合并两个dict
z.update(x),这样相当于z+ x
24:值得注意的是
在json的世界中,单引号是不合理的,应该使用双引号。且键必须用双引号。并且存入数据库的数据也必须是满足这样的要求
例如:str = ‘{“name”:percy, “count”:20}’
这样insert进去就可以直接拿出来用
25:json数据和dict数据的相互转换
loads():将json数据转化成dict数据,从数据库中取出来的json字符串是需要这样处理
dumps():将dict数据转化成json数据
参考:https://blog.csdn.net/qq_33689414/article/details/78307018
26:Python中数字和字符不能直接比较,切记切记,例如从前端传来的一个数字,那么它应该是一个数字字符,不能和Python中的数字直接比较,需要使用int(),或者str()转换。
27:varchar
参考:https://blog.csdn.net/zhengshg/article/details/64918884
MySQL5.0.3之前varchar(n)这里的n表示字节数
MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个
MySQL要求一个行定义长度不能超过65535个字节,不包括text、blob等大字段类型,varchar长度受此长度限制,和其他非大字段加起来不能超过65535个字节.
varchar(n)占用几个字节跟字符集有关系:
字符类型若为gbk,每个字符占用2个字节
字符类型若为utf8,每个字符最多占用3个字节
28:教训啊
如果没有值不方便的话,可以初始化为””,这样很完美
29:django查询数据库很慢,时间差不多为5秒,
这里要注意为什么是5秒,我的原因是因为数据库和程序不在同一台机器上,也就是没有本地通信,所以时间为5秒。还有就是django会对一些查询做一个本地缓存,接下来的一次查询不会去查询数据库,而是直接使用缓存的数据。
30:restful的风格
个人理解,一切资源化,资源的url的设计是资源+操作(本来的设计是没有操作这一项的,通过post,put,get,delete来实现差异化)
31:缺少csrf出现403错误
解决base页面添加:{% csrf_token%}
https://www.jianshu.com/p/9346bbc3a8f1