linux 安装python 3环境
https://www.cnblogs.com/flowercatnice/p/11694293.html
linux 切换 python 版本号
https://www.cnblogs.com/xbit/p/10286168.html
Python 2 和python 3 的区别
https://www.cnblogs.com/zengyi1995/p/10736673.html
Python 创建django 项目
django-admin startproject siteblog
django2.1 文档
https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial01/
python3使用mysqldb 可以安装 pip3 install mysqlclient
需要修改配置vim /usr/local/mysql_config
1 将 mysql_config 修改为可读权限 chmod 777 mysql_config 777 为可读可写可操作权限
将 > # Create options > libs="-L$pkglibdir" > libs="$libs -l " 替换为 > # Create options > libs="-L$pkglibdir" > libs="$libs -lmysqlclient -lssl -lcrypto"
再次执行以下 pip3 install mysqlclient
django 2.1 和django1.4.22 的区别
1 manage.py 内容 2 加了异常
2 url 路径不一样 2 是 from django.urls import path 1 是from django.conf.urls import patterns, include, url
settings 不一样,模板路径和静态路径是直接创建好的,mysql 配置不一样,模板也变了
urls.py
路径稍有不同
3 models 不同
reverse 导入问题 之前都是 from django.core.urlresolvers import reverse
现在都是 from django.urls import reverse
语法变了
os.path 的详情使用链接https://www.cnblogs.com/gaohuayan/p/11142123.html
python 2 和python 3 以及django 1.4.22 和django 2.1 的区别
python2 python3
字典排序
1 p2: dict_items.sort()
p3: items = sorted(dictionary.items())
2 p2: from django.core.urlresolvers import reverse
p3:from django.urls import reverse
url 路径
3 p2: url 直接使用 正则 路径不使用url 函数
p3: 普通路径 用path 正则用 re_path
导包
4 p2: from widgets import UEditorWidget
p3: 必须带上上一级的包from DjangoUeditor.widgets import UEditorWidget 对导包路径要求严格
configparser
5 p2:configparser Python2.x 中名为 ConfigParser
p3 :configparser
6 p2 事务处理transaction.commit_on_success()
p3 django2 处理事务 不知道,没有transaction.commit_on_success(
7 p2 xrange
p3 range
8 p2 from django.utils.encoding import force_unicode
p3:没有from django.utils.encoding import force_unicode
9 python2 抛出异常 except Exception,e 或者as e
p3只有as e 抛出异常没有 ,e 这样的语法
10 python2 commands
p3 python3 commands 被 subprocess 取代
11 python2 有unicode 和非unicode
p3 没有unicode str 就是unicode
12 长整型 有L
p3 没后long
13 p2 has_key 字典中是否包含指定的key
p3 不再支持 需要使用in
14 p2 :isinstance 2 可以判断unicode
p3 3 isinstance 不用判断 unicode
15 p2 :解压bytearray 类型 prodesc = zlib.decompress(str(prodesc)) # 解压
p3 :python3 解压
prodesc = zlib.decompress(prodesc) # 解压
print (type(prodesc))
aa = prodesc.decode('utf-8')weijin_prodesc1 = weijin_prodesc1.encode('utf-8')
weijin_prodesc2 = zlib.compress(weijin_prodesc1) # 压缩
16 p2 :from django.utils.importlib import import_module
p3 from django.utils.module_loading import import_module 或者
from importlib import import_module
17 p2 from django.db import close_connection
close_connection()
18 from django.db import close_old_connections
close_old_connections()
19 p2 not isinstance(label_name, (int, basestring)
p3 if not isinstance(label_name, (int, str)
20 p2 re.findall(ur'12', '123')
p3 re.findall(r'12', '123')
21 p2 from django.shortcuts import RequestContext
p3 from django.shortcuts import RequestContext
22 p2 import urllid3
p3 python3 没有urllid3 替换方法 import urllib3 或者 import urllib.request as urllib2
23 p2 python 2 urllib2、urlparse、和robotparser urlparse.urljoin
python3 urllib2、urlparse、和robotparser并入了urllib
urllib.error:ContentTooShortError、HTTPError、URLError
urllib.parse:parseqs、parseqsl、quote、quotefrombytes、quote_plus、unquote unquoteplus、unquoteto_bytes、urldefrag、 urlencode、urljoin、 urlparse、 urlsplit、 urlunparse、 urlunsplit
urllib.request:AbstractBasicAuthHandler、 AbstractDigestAuthHandler、 BaseHandler、 CatheFTPHandler、 FTPHandler、 FancyURLopener、FileHandler、HTTPBasicAuthHandler、 HTTPCookieProcessor、HTTPDefaultErrorHandler、 HTTPDigestAuthHandler、 HTTPErrorProcessorl、 HTTPHandler、HTTPPasswordMgr、 HTTPPasswordMgrWithDefaultRealm、 HTTPRedirectHandler、HTTPSHandler、OpenerDirector、ProxyBasicAuthHandler ProxyDigestAuthHandler、 ProxyHandler、 Request、URLopener、UnknowHandler、 buildopener、 getproxies、 installopener、 pathname2url、 url2pathname、 urlcleanup、 urlopen、 urlretrieve
urllib.response:addbase、addclosehook、addinfo、addinfourl
urllib.robotparser:RobotFileParser from urllib.parse import urljoin
25:Python2 quote 使用 urllib.quote()
python3 from urllib.parse import quote
python2 urllib2.urlopen()
python3 from urllib.request import urlopen
26 python 2 aes 加密没有加密参数 aes = AES.new(key)
python3 需要安装包 pip3 install pycryptodome
初始化加密参数 aes = AES.new( key.encode('utf-8'),AES.MODE_CBC)
27 python2 有 basestring
Python3 没有 basestring 用str 代替了 basestring
28 python 2 join 导包 from os.path import join
python3 import os 方式 os.path.join()
29 python 2 LANGUAGE_CODE = 'zh-CN'
python3 LANGUAGE_CODE = 'zh-Hans'
30 python 3 没有 django.db 没有 __metaclass__ = models.SubfieldBase
31python3 not urls.py 没有 re_path(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATICFILES_DIRS[0]}),
32 django 2 以上models 的路径必须是相对路径,不能是绝对路径
33 django2 没有IPAddressField 这个models 改为 GenericIPAddressField
34 middleware 配置和django 1 不一样
35 template模板配置不一样
36 md5 加密 ,加密对象必须是encode python3 默认str 默认是unicode 报错信息Unicode-objects must be encoded before hashing
python2 aes 使用加密
python 3 aes 使用 加密
解密
python 2
python3
python 2 元组排序 sorted
python3
python 2 has_key
python 3
python 2
python3