道:理论类
斯科特:《组织理论:理性、自然与开放系统的视角》 周雪光:《组织社会学十讲》 韦伯:《新教伦理与资本主义精神》, got

祝日 / Permanent Vacation

❣ Chile in a Photography ❣
taylor price
"I'm Dorothy Gale from Kansas"

Origami Around
No title available
occasionally subtle

No title available

Discoholic 🪩
Monterey Bay Aquarium
Alisa U Zemlji Chuda
Acquired Stardust

JBB: An Artblog!

shark vs the universe
h
No title available
Aqua Utopia|海の底で記憶を紡ぐ
tumblr dot com

#extradirty
2025 on Tumblr: Trends That Defined the Year
seen from United States

seen from China

seen from Germany

seen from Malaysia
seen from Australia

seen from Canada

seen from Netherlands

seen from Germany
seen from Hungary

seen from Ireland

seen from United Kingdom
seen from Belgium

seen from United Kingdom

seen from Malaysia

seen from Germany
seen from Iraq
seen from Poland

seen from United States

seen from United States
seen from United States
@czp356
道:理论类
斯科特:《组织理论:理性、自然与开放系统的视角》 周雪光:《组织社会学十讲》 韦伯:《新教伦理与资本主义精神》, got
Ubuntu 16 更新 Git 项目
安装、配置 git
$ apt-get install -y git $ git config --global user.name "chang8128" $ git config --global user.email "[email protected]"
用 django 创建一个项目 myweb
$ django-admin startproject myweb $ cd myweb
创建、更新虚拟环境
$ sudo apt-get install -y python-pip $ pip freeze > requirements.txt
这条命令可以将当前(虚拟VENV)环境需要的组件(python 组件、包)等,打包到 requirements.txt 这个文件中。 当重新创建一个新的环境时,只需按照这个配置文件重新安装即可:
# pip install -r 'requirements.txt'
即可完成所需要的各个组件,而不需要一一安装了。
在工作目录中初始化 git 新仓库
$ git init $ git add README.txt # 添加 README.txt 文件 $ git add *.c # 添加 *.c 文件到仓库中 $ git add . # 跟踪当前目录下的文件
以上命令即创建了一个本地的仓库。
从现有仓库克隆:
$ git clone https://github.com/chang8128/mblog
这会在当前目录下创建一个名为“mblog”的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。
$ git clone git://github.com/schacon/grit.git mygrit 这会在当前目录下创建的目录名 “grit” 改为 mygrit。
在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。所以使用 Git 时的文件状态变化周期如图所示: 
检查 GIT 文件状态:
$ git status # 查看当前文件状态
刚刚创建的文件(比如 readme.txt),如果用 git status 来查看,会显示在“Untracked files” 项目中。 使用 git add readme.txt 将该文件添加到仓库中后,该文件的状态即为 “Changes to be committed” ,就说明该文件已经是暂存状态。
“Changed but not updated”说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行 git add 命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)。
之后,这些文件的状态就会变为“Changes to be committed”。
忽略某些文件 无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:
$ cat .gitignore # 此为注释 – 将被 Git 忽略 *.[oa] # 忽略所有以 .o 或 .a 结尾的文件。一般是编译过程中出现的 *~ # 忽略所有以波浪符(~)结尾的文件 *.a # 忽略所有 .a 结尾的文件 *.pyc # python 运行编译文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff .
请注意,单单 git diff 不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异。所以有时候你一下子暂存了所有更新过的文件后,运行git diff 后却什么也没有,就是这个原因。
创建项目配置清单,更新到 git
提交更新 $ git commit -m 'first commit'
-m 参数后跟提交说明的方式,在一行命令中提交更新: 好,现在你已经创建了第一个提交!可以看到,提交后它会告诉你,当前是在哪个分支(master)提交的,本次提交的完整 SHA-1 校验和是什么(463dc4f),以及在本次提交中,有多少文件修订过,多少行添改和删改过。
记住,提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
$ git status # On branch master # # Changed but not updated: # # modified: benchmarks.rb # $ git commit -a -m 'added new benchmarks' [master 83e38c7] added new benchmarks 1 files changed, 5 insertions(+), 0 deletions(-)
看到了吗?提交之前不再需要 git add 更新的文件如 benchmarks.rb 了。
用 $ git log 来查看更新历史记录。 用 $ git log -p -2 选项显示每次提交的内容差异,用 -2 则仅显示最近的两次更新, --stat 参数则仅显示简要的增改行数统计。
修改最后一次提交
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend 选项重新提交:
如以下操作,添加补充了forgotten_file 文件:
$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
Git 远程仓库的使用
要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字。 -v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址。 在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库(如果有多个远程仓库,此命令将全部列出。):
# git remote -v origin https://github.com/chang8128/mblog_python2 (fetch) origin https://github.com/chang8128/mblog_python2 (push)
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]: 如:
$ git remote add origin git://github.com/schacon/ticgit.git $ git remote add pb git://github.com/paulboone/ticgit.git $ git remote -v origin git://github.com/schacon/ticgit.git pb git://github.com/paulboone/ticgit.git
现在可以用字串 pb 指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb:
$ git fetch pb remote: Counting objects: 58, done. remote: Compressing objects: 100% (41/41), done. remote: Total 44 (delta 24), reused 1 (delta 0) Unpacking objects: 100% (44/44), done. From git://github.com/paulboone/ticgit * [new branch] master -> pb/master * [new branch] ticgit -> pb/ticgit
现在,Paul 的主干分支(master)已经完全可以在本地访问了,对应的名字是 pb/master,你可以将它合并到自己的某个分支,或者切换到这个分支,看看有些什么有趣的更新。
从远程仓库抓取数据 正如之前所看到的,可以用下面的命令从远程仓库抓取数据到本地: $ git fetch [remote-name] 此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。
如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。
推送数据到远程仓库
项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。实现这个任务的命令很简单: git push [remote-name] [branch-name] 。如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:
$ git push origin master
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那 你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。
推送数据到远程仓库的实际操作:
(VENV) root@jdu4e00u53f7:~/mblog# git push origin master Username for 'https://github.com': chang8128 Password for 'https://[email protected]': Counting objects: 30, done. Delta compression using up to 2 threads. Compressing objects: 100% (30/30), done. Writing objects: 100% (30/30), 8.04 KiB | 0 bytes/s, done. Total 30 (delta 10), reused 0 (delta 0) remote: Resolving deltas: 100% (10/10), completed with 5 local objects. To https://github.com/chang8128/mblog_python2 3b3de0e..44c7fc6 master -> master (VENV) root@jdu4e00u53f7:~/mblog#
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changed but not updated” 部分(也就是_未暂存_清单). for example:
$ rm grit.gemspec $ git status On branch master Changed but not updated: (use "git add/rm ..." to update what will be committed) deleted: grit.gemspec
然后再运行 git rm 记录此次移除文件的操作:
$ git rm grit.gemspec $ git rm grit.gemspec rm 'grit.gemspec' $ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) deleted: grit.gemspec
最后提交的时候,该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆.a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 --cached 选项即可:
$ git rm --cached readme.txt
后面可以列出文件或者目录的名字,也可以使用 glob 模式。比方说:
$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \,因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开.此命令删除所有log/ 目录下扩展名为 .log 的文件。
类似的比如:
$ git rm \*~
会递归删除当前目录及其子目录中所有 ~ 结尾的文件。
实际应用Git
Ubuntu 16 更新 Git 项目
# 获取项目文件并存储在本地,重新命名为 mblog # git clone https://github.com/chang8128/mblog_python2 mblog # git rm \*pyc # 从本地仓库仓库删除所有以 pyc 结尾的文件(包括*.pyc) # git commit -m -a # 提交存储到本地仓库中
项目环境、及 GIT 版本的管理
用 pip freeze 建立、更新 python 组件清单,再使用 git push 更新到 github 上即可。
以后如果更换电脑,需要新建一个环境,那么只需要执行以下步骤即可恢复项目:
使用 anaconda 创建虚拟环境:
1、使用 conda create --name python36 python=3.6 新建虚拟环境 2、source activate python36 激活该虚拟环境 3、conda info -e 查看已有的环境
使用 virtualenv 创建虚拟环境:
1、# pip install virtualenv 2、 # virtualenv VENV New python executable in /root/VENV/bin/python Installing setuptools, pip, wheel... done. 3、# source VENV/bin/activate
4、切换到项目目录下; 5、使用 git pull 从远端拉取最新版本的资料到本地
# git clone https://github.com/chang8128/mblog
6、使用 pip install 安装所有使用到的套件
# pip install -r 'requirements.txt'
7、开始工作 8、再次使用 pip freeze > requirements.txt 更新所用到的组件 9、使用 git push 上传所有的更新。 ```
每次使用 $ ssh [email protected] 登录之后,需要运行 source activate python36 以进入该环境:
(python36) root@jdu4e00u53f7:~# conda info -e # conda environments: # python36 * /root/anaconda3/envs/python36 root /root/anaconda3
frist Django mblog 工程
新建一个 mblog project
$conda install django $django-admin startproject mblog $cd mblog $django-admin startapp mainsite
上面这句话创建了一个project名称 mblog,这个名称是可以修改的,目录结构如下:
. ├── manage.py ├── db.sqlite3 └── mainsite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
对于上面几个文件的介绍:
manage.py:与Django进行交互的命令行工具,比如后面根据model生成数据库表结构、供开发使用的server等都是使用该工具,在manage.py的同级目录使用python manage.py 可以看到可以使用的命令列表。
mainsite:这个才是工程的包名。
init.py:表明 fmtc 是一个包。
setting.py:Django的配置文件,包括工程的app配置、数据库配置、语言配置等。
urls.py:Django 的 dispatcher,根据不同的url 映射到不同的视图。
wsgi.py:WSGI是web server gateway interface,这个文件是使project符合这种协议的入口点(entry-point)
运行web 服务 runserver
$python manage.py runserver
在manage.py的同级目录下运行这个命令就可以看到以下内容:
Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. July 10, 2016 - 09:20:57 Django version 1.9.7, using settings 'fmtc.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
说明我们成功创建了一个project,在浏览器中输入 http://127.0.0.1:8000/,看到以下画面表示成功: 
Django自带了一个开发服务器,便于开发使用(Django官方强调不能用作生产环境),默认端口号是8000,如果想运行在别的端口号,以下面的方式运行即可,比如:8080
$python manage.py runserver 8080
如果想在局域网内其他电脑上访问你的站点
$python manage.py runserver 0.0.0.0:8080
按Ctrl C停止服务器。
如果需要发布在internet上,那么需要修改 fmtc/settings.py
ALLOWED_HOSTS = ['*'] 允许所有的网段都可以访问。
修改中文显示and timezone
修改 fmtc/setting.py 文件(line 106): LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'
创建项目数据库 update to mysql database
首先安装 MySQL-python 组件:
(VENV)root@jd:~/mblog# pip install MySQL-python
modify file 'root/mblog/mblog/settings.py' to this, change the default sqlite3 drivers:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'fmtcdb', 'USER': 'fmtc', 'PASSWORD': 'FMTC@2017', 'HOST': '127.0.0.1', 'PORT': '3306', } }
build the archive database information:
# python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying sessions.0001_initial... OK root@jdu4e00u53f7:~/mblog#
The result screenshot: 
此后,所有在该网站中新增到数据库中的数据,都会被放在 fmtcdb 这个数据库中,这是一个简化过的database;如果以后搬迁网站的时候,也记得要把这个数据库带上。
在Django 中使用数据库:
简要的列出在Django 中使用数据库,的大致步骤: 1、在models.py 中定义所需要使用的类(继承自models.Model) 2、详细地设定每一个在类别中的变量,及数据库表中的字段名 3、使用python manage.py makemigrations mainsite 建立数据库和Django 间的中间档案 4、使用python manage.py migrate 同步更新数据库的内容 5、在程序中使用Python 的语法操作所定义的数据类型,等于是在操作数据库中的表。
定义数据模型
一开始,models.py 的内容如下:
from django.db import models # Create your models here.
修改为如下所示的内容:
from django.db import models from django.utils import timezone # Create your models here. class Post(models.Model): title = models.CharField(max_length=200) slug = models.CharField(max_length=200) body = models.TextField() pub_date = models.DateTimeField(default=timezone.now) class Meta: ordering = ('-pub_date',) def __unicode__(self): return self.title
其他的数据字段类型定义: 参见 https://docs.djangoproject.com/en/1.11/topics/db/aggregation/
class Book(models.Model): name = models.CharField(max_length=300) pages = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2) rating = models.FloatField() authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) pubdate = models.DateField()
pub_date 是以 timezone.now 的方式让它自动产生,这需要一个pytz 模组,执行: pip install pytz 以安装它。
要让这个模型生效,需要执行以下两条指令:
$ python manage.py makemigrations mainsite Migrations for 'mainsite': mainsite/migrations/0001_initial.py - Create model Post root@jdu4e00u53f7:~/mblog#
生成数据库表:
$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, mainsite, sessions Running migrations: Applying mainsite.0001_initial... OK root@jdu4e00u53f7:~/mblog#
此时,既可以在程序中直接操作该数据库了,但是为了方便,需要启用Django 的 admin 管理界面。
经验:在 models 里定义的字段,可以更新,比如,之前定义的是 models.TextField(),可以在直接修改为 CharField(max_length=30)后,再执行以上两条命令,就可以更新为新的字段格式(不过当然要符合数据库的格式)。
启用 admin 管理界面
使用命令设定管理名 admin、密码:Fmtc5979
(VENV)root@jd:~/mblog# python manage.py createsuperuser You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): mainsite. Run 'python manage.py migrate' to apply them. Username (leave blank to use 'root'): admin Email address: [email protected] Password: Password (again): Superuser created successfully. root@jdu4e00u53f7:~/mblog#
接着,把上一小节的 Post 纳入管理,请修改 mainsite/admin.py, 原内容如下:
from django.contrib import admin # Register your models here.
需要修改为以下内容:
from django.contrib import admin from .models import Post # Register your models here. admin.site.register(Post)
之后启动服务,即可通过访问 http://117.48.206.212:8080/admin 登陆。
编辑 Post内容
第一次登陆后,Post 中的内容为空,可以编辑增加内容。 之后,可以再次修改 admin.py 文件,使得该页面显示表单编辑的日期时间,及slug 等字段内容:
from django.contrib import admin from .models import Post # Register your models here. class PostAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'pub_date') admin.site.register(Post, PostAdmin)
显示如图所示:

建立网页输出模版 template
前一节介绍了如何使用 Post.objects.all() 取出所有的数据,并通过 HttpResponse 输出到浏览器。本节介绍使用 template ,给每一个输出的网页准备一个或以上的模版,当网站有数据需要输出时,再透过渲染函数 render 把数据放到模板指定的位置中,得到结果后再交给 HttpResponse 输出给浏览器。其基本步骤如下: 1、在setting.py 中设定模板文件夹位置 2、在 url.py 中建立网址和 views.py 中的函数对应的关系 3、建立 .html 文件,做好排版并安排数据要放置的位置 4、执行程序,以 object.all() 在 views.py 取得数据,并放入函数中,例如 posts 5、以 render 函数,把数据(例如 posts)送到指定的模板文件中(如index.html)。
Django 创建数据库连接
python3.6不支持 import MySQLdb 改用为 import pymysql 模块,需要自行安装模块pymysql, 在Ubuntu 环境下 安装 mysql 支持包的方法是:
# conda install pymysql # conda install MySQL-connector-python
解决报错:ImportError: No module named MySQLdb
# apt-get install python-mysqldb # pip install mysqlclient
当以上命令安装后,都无法连接到数据库时,不着急,退出终端,等一会儿再连接。好了!
以下是使用migration 迁移策略的顺序:
第一步:创建数据库
第二步:在项目下的setting.py中配置数据库的相关设置.
下面是我实测后的一个范例,注意把引擎改为 mysql.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'fmtc', 'USER': 'fmtc', 'PASSWORD': 'FMTC@2017', 'HOST': '127.0.0.1', 'PORT': '3306', } }
第三步:是在自己的app项目中的models创建模型.
下面是我创建模型的实测范例.
from django.db import models # Create your models here. class Stuff(models.Model): name = models.CharField(max_length=50) class TestInfo(models.Model): datetime = models.CharField(max_length=10)
第四步: 确认自己的app在setting中的 INSTALLED_APPS 中添加.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hangqing', ]
第五步:开始执行命令:
root@jdu4e00u53f7:~/fmtc#python manager.py makemigrations Migrations for 'hangqing': hangqing/migrations/0001_initial.py - Create model Stuff - Create model TestInfo
第六步:运行下第二个命令
root@jdu4e00u53f7:~/fmtc# python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying sessions.0001_initial... OK root@jdu4e00u53f7:~/fmtc#
以上命令执行成功后,会在 mysql 数据库 fmtc 中,创建十个表, 用于 django 使用。 
account_db1, account_zx1 是自己创建的交易信息表。 小结:记得有问题,到django 的官方网站找答案😄。
create supervisor for Django admin interface:
# python manage.py createsuperuser
Username: admin Password: Fmtc5979
Python 虚拟环境在 Ubuntu 的安装、管理
首先 pip 才是最通用的 python 包管理工具
安装 pip 的命令:
#apt-get -y install python-pip #pip install --upgrade pip
pip 安装后的路径: /Library/Python/2.7/site-packages/pip-20.0.2-py2.7.egg/pip
1、查看你的系统是否安装virtualenv:
# virtualenv --version
2、安装 Virtualenv 虚拟环境:
# pip install virtualenv
3、创建不同 python 版本的虚拟 python3、Pyhon2 环境:
# virtualenv --python=usr/bin/python3 venv3 # 两种命令格式都可以 # virtualenv -p /usr/bin/python2 venv2 # 两种命令格式都可以 root@jdu4e00u53f7:~# virtualenv You must provide a DEST_DIR Usage: virtualenv [OPTIONS] DEST_DIR Options: --version show program's version number and exit -h, --help show this help message and exit -p PYTHON_EXE, --python=PYTHON_EXE The Python interpreter to use, e.g., --python=python2.5 will use the python2.5 interpreter to create the new environment. The default is the interpreter that virtualenv was installed with (/usr/bin/python)
4、虚拟环境的激活、安装组件:
# source VENV/bin/activate (VENV) root@jdu4e00u53f7:~# pip install django
五、退出虚拟环境
# deactivate
六、删除虚拟环境
# rm -r venv
直接删除虚拟环境所在的文件夹venv就删除了我们创建的venv虚拟环境。
可以使用 pip freeze > requirements.txt 将当前环境中的包的名称及版本导出到文本中 然后在另一个环境中 pip install -r requirements.txt 安装
其次才推荐使用anaconda
1、下载Anaconda3: https://repo.continuum.io/archive/ 根据系统的 Python 版本选择对应的安装包。
2、进入下载目录,打开终端,根据版本输入安装命令:
Python 3.6 version #bash Anaconda3-4.3.1-Linux-x86_64.sh
Python 2.7 version bash Anaconda2-4.3.1-Linux-x86_64.sh
3、安装过程,一直回车即可,当遇到下面的选择,注意输入yes:
Do you wish the installer to prepend the Anaconda2 install location to PATH in your /home/gjq/.bashrc ? [yes|no] [no] >>> yes
4、安装成功
For this change to become active, you have to open a new terminal. Thank you for installing Anaconda2! Share your notebooks and packages on Anaconda Cloud! Sign up for free: https://anaconda.org
5、让.bashrc中添加的路径生效:
source ~/.bashrc
6、测试:
gjq@gjq-virtual-machine:~/Downloads$ python Python 2.7.13 |Anaconda 4.3.1 (64-bit)| (default, Dec 20 2016, 23:09:15) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Anaconda is brought to you by Continuum Analytics. Please check out: http://continuum.io/thanks and https://anaconda.org >>>
出现Anaconda 表示安装成功了!
配置 Anaconda Python2 和 Python3 虚拟环境
安装配置小结:
# 创建一个名为python36的环境,指定Python版本是3.6(不用管是3.6.x,conda会为我们自动寻找3.6.x中的最新版本) conda create --name python36 python=3.6 # 安装好后,使用activate激活某个环境 activate python36 # for Windows source activate python36 # for Linux & Mac # 激活后,会发现terminal输入的地方多了python36的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.6对应的命令加入PATH # 此时,再次输入 python --version # 可以得到`Python 3.6.1 :: Continuum Analytics, Inc.`,即系统已经切换到了3.6的环境 # 如果想返回默认的python 2.7环境,运行 deactivate python34 # for Windows source deactivate python34 # for Linux & Mac # 删除一个已有的环境 conda remove --name python36 --all # 其他指令 conda info -e #查看已有的环境 conda remove -n env_name --all #删除环境 conda install -n py27 anaconda #在py27下安装科学计算的包,包很多,慎重选择
创建新的 python 3.6 虚拟环境:
root@jdu4e00u53f7:~# conda create --name python36 python=3.6 Fetching package metadata ......... Solving package specifications: . Package plan for installation in environment /root/anaconda3/envs/python36: The following NEW packages will be INSTALLED: certifi: 2016.2.28-py36_0 openssl: 1.0.2l-0 pip: 9.0.1-py36_1 python: 3.6.2-0 readline: 6.2-2 setuptools: 36.4.0-py36_0 sqlite: 3.13.0-0 tk: 8.5.18-0 wheel: 0.29.0-py36_0 xz: 5.2.3-0 zlib: 1.2.11-0 Proceed ([y]/n)? y
Ubuntu16.04 LTS安装Qt Creator
开发需要,在 Linux下安装Qt Creator。我电脑装的是Ubuntu16.04LTS,其它的应该相同! 1、Qt下载 关于Qt下载,比较机智的同学都回去官网直接download,但是步骤相当繁琐!大家可以打开下面的链接,里面有各版本Qt,操作简单,童叟无欺! http://download.qt.io/archive/qt/ Linux最新版是5.9.1,大家根据需要下载x86或x64版本
2、安装 首先要cd进入软件安装包的目录,然后取得安装权限,进行图形化安装,如下:
root@jdu4e00u53f7:~# ls Desktop Downloads libEMQuantAPIx64.so libjson.so Linux_3 ServerList.json ServerList.json~ root@jdu4e00u53f7:~# cd Downloads/ root@jdu4e00u53f7:~/Downloads# ls qt-opensource-linux-x64-5.9.1.run root@jdu4e00u53f7:~/Downloads# chmod +x qt-opensource-linux-x64-5.9.1.run root@jdu4e00u53f7:~/Downloads#
3、安装过程几乎一路next,在选择时如果需要Assistant,想学习官方源码就select all就可以了。等待安装完成 4、Qt以C/C++为依托,用Python也可,先检查一下有没有gcc/g++编译器,没有的话动手安装,不多说了 5、如果系统没有自带openGL库时,在做带有3D效果的界面会报错,手动安装openGL
sudo apt-get install mesa-common-dev sudo apt-get install libglu1-mesa-dev -y
完成! 运行官方示例程序如下: 
Ubuntu 16.04安装 GNOME3 + VNC
更新 Ubuntu 系统补丁:
sudo apt-get -y upgrade
开始:有一个更简单粗暴的办法是直接装 UBUNTU GNOME发行版,但是当我安装完UBUNTU16的时候,我真的不想重新装一遍系统。
所以就在原有基础上安装gnome3,很多人觉得用不习惯,其实桌面环境这个还是挺方便的。
sudo apt-get install gnome-shell sudo apt-get install ubuntu-gnome-desktop
值得注意的是,记得要在安装gnome-shell的时候选择那个gdm,不然开机默认还是unity
sudo apt-get install unity-tweak-tool sudo apt-get install gnome-tweak-tool
然后重启大发。搞定。
配置VNC服务器
安装VNC服务端 #sudo apt-get install vnc4server
开启VNC服务 #sudo vncserver
在此期间会要求设置VNCServer的密码,注意,最大长度为8位。 设置密码后,看到(连接VNC 用端口 1) New ‘****:1 (****)’ desktop is ****:1 (****代表主机名,注意那个:1)
关闭原桌面进程并生成新进程 sudo vncserver -kill :1
生成新的进程: sudo vncserver :1
重启服务器后,可能半天无法登录,这时,只需要等一会儿就行了
这时,登录ssh 会提示: 
这种情况,是后台以为你的服务器开了N 多个回话,攻击服务器,所以不要紧张,等一会就可以登录了。
Ubuntu 16 安装GNOME,和vncserver后只显示桌面,不显示菜单栏解决
一般的server操作系统是不安装图形系统的,这样的话,要想打开它的图形界面可以在server端上安装vncserver软件。然后再在本地机器(windows或linux)上安装一个vnc viewer就能显示图形界面。
最后我不得不安装另一个图形库Xfce4 $ sudo apt-get install xfce4
安装会提示有未更新的文件,用更新的来安装: $sudo apt-get update
然后修改配置文件~/.vnc/xstartup如下:
#!/bin/sh # Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & sesion-manager & xfdesktop & xfce4-panel & xfce4-menu-plugin & xfsettingsd & xfconfd & xfwm4 &
然后重启vcnserver, # vncserver -kill :1 # vncserver
再在本地登录,成功!
Ubuntu16 安装、配置MySQL 5.7
安装MySQL 5.7
1. sudo apt-get install mysql-server 2. apt-get install mysql-client 3. sudo apt-get install libmysqlclient-dev
安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功: sudo netstat -tap | grep mysql 通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。
登陆mysql数据库可以通过如下命令: mysql -u root -p -u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。
使用命令行在ubuntu下安装mysql可视化工具MySQL-workbench #apt-get install mysql-workbench
Ubuntu 打开Mysql 3306远程访问
1、查看3306端口是否正常
netstat -an | grep 3306 2、修改mysql配置文件(记住是Ubuntu16下的目录、文件均不同于14版本)
#vi /etc/mysql/mysql.conf.d/mysqld.cnf
将 bind-address =127.0.0.1 这句注释掉, :wq 退出,重启动mysql
# service mysql stop # service mysql start
3、修改 MySQL 用户的本地登录限制(% 为可以远程登录),使用密码FMTC@@2017:
root@jdu4e00u53f7:~# mysql -u root -p mysql>select Host,User from mysql.user; mysql>update mysql.user SET HOST='%' WHERE USER='你的用户名'; mysql>flush privileges;
创建新用户
1、以管理员身份登录MySQL,并选择mysql数据库
# mysql -u root -p mysql> use mysql
2、创建用户并设定密码,并使操作生效
mysql> create user ‘testuser’@’localhost’ identified by ‘testpassword’; mysql> create user ‘fmtc’@’%’ identified by ‘FMTC@2017’; mysql> flush privileges
注意:创建 fmtc 的用户使用的 '%' 参数,使得该用户可以不限制在本地登录。 'localhost',是指该用户只能在本地登录,不能在另外一台机器上远程登录。 也可以指定某个IP的电脑可以远程登录。
mysql 修改一个用户的登录限制为 '%'
mysql>select Host,User from mysql.user; mysql>update mysql.user SET HOST='%' WHERE USER='你的用户名';
3、为用户赋予操作数据库testdb的所有权限
musql>grant all privileges on fmtcdb.* to fmtc;
fmtc 用户不受登录限制;
mysql>grant all privileges on testdb.* to test@localhost identified by ‘testpassword’;
4、用新用户登录
mysql -u test -p
创建数据库:
创建编码为utf8的数据库:
mysql>CREATE DATABASE `fmtcdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql>grant all privileges on fmtcdb.* to fmtc;
创建编码为GBK的数据库:
mysql>create database windDB default character set GBK collate GBK_chinese_ci; mysql>grant all privileges on windDB.* to wind@localhost identified by 'Wind2017'; mysql>flush privileges; mysql>show databases;
查看某个数据库的编码 用use db_name 切换到这个数据库,然后使用status 命令: mysql>use windDB; mysql>status
Ubuntu16 更改MySQL 5.7 的默认数据文件目录
关闭mysql-server #sudo systemctl stop mysql #sudo systemctl stop mysql
确认的确关闭了mysql-server #sudo systemctl status mysql
/etc/mysql/my.cnf 显示的配置文件:
CONF=/etc/mysql/my.cnf !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
数据盘/vdb加载在/mnt 上,创建了/mnt/database目录: 1.停止数据库服务:#service mysql stop
复制原先的数据目录到新目录下(cp -a 参数带原来的权限): # cp -a /var/lib/mysql /mnt/database (-a 参数:same as -dR --preserve=all)
修改数据库文件的所属的权限: # chown -R mysql:mysql /mnt/database/mysql/ ← 改变数据库文件目录的归属为mysql
3.修改 mysqld.cnf 文件 #vi /etc/mysql/mysql.conf.d/mysqld.cnf 将datadir = /var/lib/mysql 改为datadir = /mnt/database/mysql 4. 修改文件usr.sbin.mysqld(注释#并新增两处,一个是目录 ,一个是目录下的文件) # vi /etc/apparmor.d/usr.sbin.mysqld
+++++++++++++++++++++++++ # Allow data dir access # /var/lib/mysql/ r, # /var/lib/mysql/** rwk, /mnt/database/mysql/ r, /mnt/database/mysql/** rwk, # Allow data files dir access # /var/lib/mysql-files/ r, # /var/lib/mysql-files/** rwk, /mnt/database/mysql/ r, /mnt/database/mysql/** rwk, +++++++++++++++++++++++++
5 AppArmor权限修改 追加以下内容到 /etc/apparmor.d/tunables/alias alias /var/lib/mysql/ -> /data/mysql/,
重启AppArmor #sudo systemctl restart apparmor
6 启动mysql-server sudo systemctl start mysql sudo systemctl status mysql
或者:#service mysql start 
以下可能需要: 配置文件修改成功后就可以重启数据库,重启数据库之前需要先重新载入apparmor配置文件,使用下面命令重新载入: #sudo /etc/init.d/apparmor restart
Ubuntu通过apt-get安装JDK8(Ubuntu 14/16通过)
安装python-software-properties $sudo apt-get install python-software-properties $sudo apt-get install software-properties-common
首先添加ppa $ sudo add-apt-repository ppa:webupd8team/java
然后更新系统 $ sudo apt-get update
最后开始安装
$ sudo apt-get install oracle-java8-installer $ java -version java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) Server VM (build 25.5-b02, mixed mode)
java版本切换 sudo update-java-alternatives -s java-8-oracle
Ubuntu14 配置GUI + VNC 远程访问
安装gnome桌面环境(一定要先装,否则会反复失败!)
安装x-windows的基础: #sudo apt-get install x-window-system-core (部分文件不成功,用#apt-get update)
安装登录管理器 #sudo apt-get install gdm
安装Ubuntu的桌面: #sudo apt-get install ubuntu-desktop
重启之后进入系统便有GUI了
配置VNC服务器
安装VNC服务端 #sudo apt-get install vnc4server
开启VNC服务 #sudo vncserver
在此期间会要求设置VNCServer的密码,注意,最大长度为8位。 设置密码后,看到(连接VNC 用端口 1) New ‘****:1 (****)’ desktop is ****:1 (****代表主机名,注意那个:1)
关闭原桌面进程并生成新进程 sudo vncserver -kill :1
生成新的进程: sudo vncserver :1
Ubuntu 14安装vncserver后只显示桌面,不显示菜单栏解决
一般的server操作系统是不安装图形系统的,这样的话,要想打开它的图形界面可以在server端上安装vncserver软件。然后再在本地机器(windows或linux)上安装一个vnc viewer就能显示图形界面。
最后我不得不安装另一个图形库Xfce4 $ sudo apt-get install xfce4
安装会提示有未更新的文件,用更新的来安装: $sudo apt-get update
然后修改配置文件~/.vnc/xstartup如下:
#!/bin/sh # Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & sesion-manager & xfdesktop & xfce4-panel & xfce4-menu-plugin & xfsettingsd & xfconfd & xfwm4 &
然后重启vcnserver, # vncserver -kill :1 # vncserver
再在本地登录,成功!
解决图标都是空白的问题(安装一个好的主题): You can try installing the Greybird theme which is the default theme in Xubuntu with the command: #sudo apt-get install shimmer-themes Then choosing "greybird-git" (not Greybird!) from the XFCE settings
For the icon theme, use this command: #sudo apt-get install xubuntu-icon-theme Then choose the "Elementary XFCE Dark" theme (or similar) from the XFCE settings
在终端中输入xfwm4-settings打开“XFCE settings”
Ubuntu14上安装MySQL
Ubuntu上安装MySQL非常简单只需要几条命令就可以完成。
1. sudo apt-get install mysql-server 2. apt-get install mysql-client 3. sudo apt-get install libmysqlclient-dev
安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功: sudo netstat -tap | grep mysql 通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。 登陆mysql数据库可以通过如下命令: mysql -u root -p -u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。
Ubuntu 打开Mysql 3306远程访问 最近在Ubuntu Server 15.10配置MySQL服务器,发现不能远程访问(ps:已建立一个可以远程访问的用户)。 1、查看3306端口是否正常 netstat -an | grep 3306 2、修改mysql配置文件(记住是mysqld.cnf,不是my.cnf) #vi /etc/mysql/my.cnf
将 bind-address =127.0.0.1 这句注释掉, :wq 退出,重启动mysql # service mysql stop # service mysql start
创建用户:
mysql> insert into mysql.user(Host,User,Password) values("localhost","wind",password("Wind2017")); mysql> insert into mysql.user(Host,User,Password) values("%","wind",password("Wind2017"));
这样就创建了一个名为:test 密码为:1234 的用户。 注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
mysql 如何修改一个用户的权限为% select Host,User,Password from mysql.user; mysql.user SET HOST='%' WHERE USER='你的用户名';
在mysql数据库中建一个编码为gbk的数据库:
mysql>create database windDB default character set GBK collate GBK_chinese_ci; mysql>grant all privileges on windDB.* to wind@localhost identified by 'Wind2017'; mysql>flush privileges; mysql>show databases;
要查看某个数据库的编码 用use db_name 切换到这个数据库,然后使用status 命令: mysql>use windDB; mysql>status
使用命令行在ubuntu下安装mysql可视化工具MySQL-workbench #apt-get install mysql-workbench
Ubuntu 14更改Mysql 数据库文件目录
实际操作: 数据盘加载在/mnt 上:
停止数据库服务: #service mysql stop
在目标位置(/mnt)创建数据库文件的目录 /mnt/database),并复制原先的数据库文件目录到该目录下: cd /mnt mkdir database cp -r /var/lib/mysql /mnt/database
修改my.cnf文件 # vim /etc/mysql/my.cnf 将datadir = /var/lib/mysql 改为 datadir = /mnt/database/mysql
修改数据库文件的所属的权限: # chown -R mysql:mysql /data/mysqldb/mysql/ ← 改变数据库文件目录的归属为mysql
修改文件usr.sbin.mysqld # vim /etc/apparmor.d/usr.sbin.mysqld 把 /var/lib/mysql r, /var/lib/mysql/** rwk, 改成 /data/mysqldb/mysql/ r, /data/mysqldb/mysql/** rwk,
启动mysql服务器 #service mysql start 成功! 
Ubuntu14 中 MySQL更改数据库文件的目录
公司的ubuntu服务器对于各个系统的目录是放在不同的逻辑分区上的,比如存放MySQL数据库文件的默认目录/var/lib/mysql所在的系统目录/var/单独在一个分区上,但是这个分区的大小是固定的,不足以存放整个数据库文件。但是另一个系统目录/data大小却达到T级,大大满足了需求,因此有了更改数据库文件目录的需求。以下是我参考网络上一些文章进行尝试的过程:
停止数据库服务 使用/etc/init.d/mysql stop 或者 stop mysql
拷贝数据库文件 在目标位置(/data)创建数据库文件的目录(如/mysqldb),并复制(如果不再使用默认的位置,则可以直接mv原先数据库文件到新目录下)原先的数据库文件目录到该目录下: #cd /data #mkdir mysqldb #cp -r /var/lib/mysql /data/mysqldb/ 经过一段时间的等待后,在/data/mysqldb/下面就有了原先默认的mysql数据库文件目录的拷贝“/mysql”
修改my.cnf文件 # vim /etc/mysql/my.cnf 将 datadir = /var/lib/mysql 改为 datadir = /data/mysqldb/mysql 另外由于当前 my.cnf 中的 socket = /var/run/mysqld/mysqld.sock(而并非像网上所说的sock = /var/lib/mysql/mysql.sock),即socket的位置并不在数据库文件所在的位置,因此可以不做类似网上其他网页所说的,要使用以下的命令做一个mysql.sock 链接: ln -s /data/mysqldb/mysql/mysql.sock /var/lib/mysql/mysql.sock (需要从/home/data/mysql下复制一份过来)
修改数据库的权限: # chown -R mysql:mysql /data/mysqldb/mysql/ ← 改变数据库文件目录的归属为mysql
# chmod 700 /data/mysqldb/mysql/whois/ ← 改变数据库目录whois的属性为700
# chmod 660 /data/mysqldb/mysql/whois/* ← 改变数据库中数据表的属性为660
修改文件usr.sbin.mysqld # vim /etc/apparmor.d/usr.sbin.mysqld 把 /var/lib/mysql r, /var/lib/mysql/** rwk, 改成 /data/mysqldb/mysql/ r, /data/mysqldb/mysql/** rwk, 注意:没有该步骤的话,将导致数据库服务无法重启,好像在重启,但是一直卡住无反应。
启动mysql服务器 /etc/init.d/apparmor restart /etc/init.d/mysql restart (或者使用 restart mysql) 搞定!