Python-Django实战经验

1:电脑上有Python3.5Python2.7。默认为3.5,如何在不修改环境变量(如果可以修改环境变量那就省事了)的情况下将模块安装到2.7下。

如安装requess:需要在dos窗口下进入python2.7的安装目录,之后在dos窗口(当前目录的dos)下输入python.exe-m pip install requests 点击回车键后,即可让python2.7pip执行安装requests模块的命令。


2:报错缺少MySQLdb 模块(注意大小写最好正确)

不能单单增加MySQLdb模块,因为其依赖于MySQLclient,所以直接安装MySQLclient,这个模块后附带安装MySQLdb

注意报缺少 _mysql模块也是安装MySQLclient


3Python查看模块安装位置

先输入:python-v (注意是小写)

再输入:importmoduleName (moduleName对应模块,如django,mysqlclient)

pspython-V (查看Python版本信息)



4Django运行访问项目出现的问题:DisallowedHostat / Invalid HTTP_HOST header

解决:修改setting.py 文件:

ALLOWED_HOSTS= ['*'] #在这里请求的host添加了*


5Djangomodels.CharField(null=True,blank=True)

null是针对数据库而言,如果 null=True,表示数据库的该字段可以为空。

blank是针对表单的,如果blank=True,表示你的表单填写该字段的时候可以不填



6django中两字段使用同一模型作为外键,添加反向引用符related_name

follower= models.ForeignKey(User, related_name=‘follower‘)

followed= models.ForeignKey(User, related_name=‘followed‘)



7Django中在模板文件中使用{%url ‘apollo:app_add’ %}]

注意这里的app_add是函数名,不是通过url映射过去的。



8Django中获得指定列的数据两种方式

UserUser.objects.values(‘id’)或者User.objects.values_list(‘id’)



9Pythonstrint比较的话不会相等,应该转换

int→ str , str(12)

str→ int , int(‘12’)


10UncaughtSyntaxError: 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

Pythonos模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程:

多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。


13PythonNoneNull(空字符串)的区别

None:表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。

Null:是一個空字符,’’

在判断是均是false



14djangopost请求中由于缺少csrf出错,


如果是在表单中只需要添加一行:

{%csrf_token %}

如果是ajax请求中,则需要在请求参数中添加’csrfmiddlewaretoken’:csrftoken

并且写一个getCookiename)的方法来得到csrftoken



15djangourl的总结

url(r’app-list’,views.getList, name = ‘app_list’)

, url中都用直接映射

在这里用反向解析

render中使用.html直接渲染网页

HttpResponseRedirect()中使用url



16django

#限制返回的数据 相当于 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;



17django中实现distinct查找

User.objects.values(‘sex’).distinct().order_by(‘sex’)


注意的是必须使用values(),distinct(),以及order_by()


18django实现模糊查询

例子:AntiCrawler.objects.filter(type=type).filter(record__icontains=request.GET[‘record’]).filter(is_delete=request.GET[‘is_del’])

其中icontains表示不区分大小写,contains则表示区分大小写

算式中为两条下划线。连接点.表示and


19django实现时间段查询

AntiCrawler.objects.filter(tiem__range(date_from,date_to))

其中date_fromdate_todatetime.datetime.now()这种形式

可以参考:https://www.cnblogs.com/linjiqin/p/3821914.html,总结得很详细


20django报错multivaluedictkeyerror说明在这里这个值可能不存在例如

request.GET[‘sortName’]这里的可能并没有sortName这个参数


21:时区问题

setting.py

USE_TZ设置为True默认使用系统时间

USE_TZ设置为FalseTIME_ZONE= 'Asia/Shanghai',则会使用上海时间


22djangofilterget对没有匹配的处理

filter在数据库中没有匹配到结果会返回一个空数组,所以用len()判断是否取得数据

get在数据库中没有匹配到结果会报错。需要try… except


22values(),values_list()

values返回是字典列表;

values_list返回的是元组列表,

values_list加上flat=true,返回值列表

如可能用到的Config.objects.values_list(‘id’,flat=true).order_by(‘-id’)[0:1]

上面这个功能得到最新插入的一条数据的id



23Python合并两个dict

z.update(x),这样相当于z+ x



24:值得注意的是

json的世界中,单引号是不合理的,应该使用双引号。且键必须用双引号。并且存入数据库的数据也必须是满足这样的要求

例如:str = ‘{“name”:percy, “count”:20}’

这样insert进去就可以直接拿出来用


25json数据和dict数据的相互转换

loads():将json数据转化成dict数据,从数据库中取出来的json字符串是需要这样处理

dumps():将dict数据转化成json数据

参考:https://blog.csdn.net/qq_33689414/article/details/78307018



26Python中数字和字符不能直接比较,切记切记,例如从前端传来的一个数字,那么它应该是一个数字字符,不能和Python中的数字直接比较,需要使用int(),或者str()转换。



27varchar

参考:https://blog.csdn.net/zhengshg/article/details/64918884

MySQL5.0.3之前varchar(n)这里的n表示字节数

MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar200),不管是英文还是中文都可以存放200

MySQL要求一个行定义长度不能超过65535个字节,不包括textblob等大字段类型,varchar长度受此长度限制,和其他非大字段加起来不能超过65535个字节.

varchar(n)占用几个字节跟字符集有关系:

字符类型若为gbk,每个字符占用2个字节

字符类型若为utf8,每个字符最多占用3个字节


28:教训啊

如果没有值不方便的话,可以初始化为””,这样很完美


29django查询数据库很慢,时间差不多为5秒,

这里要注意为什么是5秒,我的原因是因为数据库和程序不在同一台机器上,也就是没有本地通信,所以时间为5秒。还有就是django会对一些查询做一个本地缓存,接下来的一次查询不会去查询数据库,而是直接使用缓存的数据。


30restful的风格

个人理解,一切资源化,资源的url的设计是资源+操作(本来的设计是没有操作这一项的,通过post,put,get,delete来实现差异化)


31:缺少csrf出现403错误

解决base页面添加:{% csrf_token%}

https://www.jianshu.com/p/9346bbc3a8f1



你可能感兴趣的:(Python)