教程
信息差
资源
软件工具
技术笔记
AIGC
视频
Search
1
使用AI实现高精度钢琴曲转谱Piano Transcription简明使用教程
37,794 阅读
2
使用ESP8266Wifi模块制作Wifi杀手
37,467 阅读
3
unravel 让图片唱歌详细教程 Real Time Image Animation 项目
27,387 阅读
4
佳能相机刷Magic Lantern魔灯固件
23,505 阅读
5
战地3 正版账号免费分享!
16,213 阅读
教程
信息差
资源
软件工具
技术笔记
AIGC
视频
Search
标签搜索
python
前端
环境搭建
空镜素材
Ubuntu
markdown
神器
黑苹果
编码
技巧
Git
数据库
开发
下载工具
Youtube
CDN
PDF
OST
电影原声带
音乐
易小灯塔
累计撰写
176
篇文章
累计收到
44
条评论
首页
栏目
教程
信息差
资源
软件工具
技术笔记
AIGC
视频
页面
搜索到
175
篇与
的结果
2018-05-23
ttyS、ttySAC、tty、ttyn的区别
ttyS串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为 那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如, 在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。ttySACPC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC,如果你发觉串口不能用,可以看看你是不是用的调试串口或者你用的串口是不是内核启动时给初始化成其他用途了tty控制终端(/dev/tty) 如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它 具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。ttyn控制台终端(/dev/ttyn, /dev/console) 在Linux 系统中,计算机显示器通常被称为控制台终端 (Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2 等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1–tty6等 称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。/dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。目前只有在单用户模式下,才允许用户登录控制台。
2018年05月23日
7,070 阅读
0 评论
0 点赞
2018-05-22
使用You-Get下载视屏
使用You-Get下载视屏You-Get同样也是一个基于Python的下载工具,与youtube-dl齐名,可以下载国内外主流视频网站上的视频,另外还能下载图片和音频安装和You-Get和FFmpeg安装Python和FFmpeg $ pip3 install you-get #安装You-Get 在命令行输入you-get, 没报错就说明已经安装成功了 $ you-get 安装ffmpeg FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec1.进入FFmpeg官网,进入下载页面,根据自己的操作系统选择下载最新的32位或64位静态程序版本2.将程序添加到环境变量使用You-Get下载视频直接输入命令接下载(默认最高质量)$ you-get [url] #一般情况下用这一个命令就够了,使用最简单,而且下载的是最高质量 仅查看视频清晰度和格式$ you-get -i [url] 下载指定清晰度的视频各个视频网站的清晰度规则不同,具体的命令可以根据上面的-i来查看$ you-get --format=hd3 #这是优酷的1080p $ you-get --itag=137 #这是YouTube的1080p You-Get的其他用法自定义下载路径$ you-get -o [new_path] [url] 暂停下载与继续暂停下载:Windows的命令提示符可以按Ctrl+C中断命令,下载目录下会保存有一个以.download为扩展名的缓存文件。继续下载:重新执行下载任务,如果下载目录下有上次下载保存的缓存文件,则继续上次下载进度。 强制重新下载(即使下载完成也会重新写入):$ you-get -f [url] 批量下载视频列表You-Get支持批量下载,比如优酷个人空间里的所有视频,播放列表里的所有视频等等$ you-get [playlist_url] 下载字幕/弹幕下载Bilibili和YouTube等带有外挂字幕/弹幕的视频时,You-Get会自动下载相应的字幕/弹幕文件 注意:Bilibili的弹幕文件是.xml格式,本地播放器可能无法加载,可以使用Danmu2Ass将.xml格式转换为.ass格式使用代理下载这里以我用的SS为例(SS用户建议使用全局代理,就不必要使用本条命令)$ you-get -x 127.0.0.1:1080 [url] 使用You-Get自动搜索Google上的视频并自动匹配最佳结果下载$ you-get "Video_Name" 除了下载在线视频网站的视频,You-Get还可以下载图片、音乐等媒体文件,限于篇幅,这里不作具体介绍,感兴趣的可以自己查阅You-Get官网和GitHub项目上的说明You-Get官网:https://you-get.org/GitHub项目:https://github.com/soimort/you-get
2018年05月22日
3,146 阅读
0 评论
0 点赞
2018-05-20
Ubuntu18.04 安装 Postman 教程
开发的过程中经常使用Postman来发起网络请求,下面就来介绍Postman这个工具到安装方法直接用Snap命令安装sudo snap install vscode 如果不能安装, 可以使用下面办法手动安装下载wget https://dl.pstmn.io/download/latest/linux64 -O postman.tar.gz 解压sudo tar -xzf postman.tar.gz -C ~/Apps 删除压缩包rm postman.tar.gz 输入下面命令运行试试~/Apps/Postman/Postman 如果有报错就安装这个包sudo apt-get install libgconf-2-4 添加到全局变量, 以后可以直接在命令行输入postman启动sudo ln -s ~/Apps/Postman/app/Postman /usr/bin/postman 创建快捷方式vim ~/.local/share/applications/postman.desktop 然后固定到dock栏即可若搜狗输入法受到影响, 候选词显示不了中文到话, 输入下面命令即可解决cd ~/.config rm -rf SogouPY* sogou*
2018年05月20日
3,180 阅读
0 评论
0 点赞
2018-05-18
k-vim:打造强大好用的vim配置
我们都知道Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,要做到强大好用但是配置起来比较麻烦k-vim是wklken的一个非常好用的vim配置的项目, 我们可以追随牛人的脚步,直接可以把他配好的vim配置拿过来使用安装使用项目地址: https://github.com/wklken/k-vim安装步骤1. clone 到本地git clone https://github.com/wklken/k-vim.git 2. 安装依赖包2.1 系统依赖 # ctags, ag(the_silver_searcher)# ubuntu sudo apt-get install ctags sudo apt-get install build-essential cmake python-dev #编译YCM自动补全插件依赖 sudo apt-get install silversearcher-ag # centos sudo yum install python-devel.x86_64 sudo yum groupinstall 'Development Tools' sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install the_silver_searcher sudo yum install cmake # mac brew install ctags brew install the_silver_searcher 2.2 使用Pythonsudo pip install flake8 yapf 2.3 如果使用Javascript(不需要的跳过)# 安装jshint和jslint,用于javascript语法检查 # 需要nodejs支持,各个系统安装见文档 https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager # ubuntu sudo apt-get install nodejs npm sudo npm install -g jslint sudo npm install jshint -g sudo npm install -g eslint eslint-plugin-standard eslint-plugin-promise eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-html babel-eslint # mac brew install node npm install jshint -g npm install jslint -g npm install -g eslint eslint-plugin-standard eslint-plugin-promise eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-html babel-eslint 3. 安装进入目录, 执行安装 # 注意原先装过的童鞋, 重装时,不要到~/.vim下执行(这是软连接指向k-vim真是目录),必须到k-vim原生目录执行 # 会进入安装插件的列表,一安装是从github clone的,完全取决于网速, 之后会自动编译 YCM, 编译失败的话需要手动编译, 有问题见YCM文档 # 如果发现有插件安装失败 可以进入vim, 执行`:PlugInstall' cd k-vim/ sh -x install.sh 移除安装cd ~ && rm -rf .vim .vimrc .vimrc.bundles && cd -
2018年05月18日
6,270 阅读
0 评论
1 点赞
2018-05-07
MongoDB 使用笔记
简介非关系型数据库, 对json有良好的支持应用场景: 监控日志, 格式不统一的数据, 内嵌的文档存储安装下载: https://www.mongodb.com/download-center#community图形化界面管理工具robo 3t安装在mangodb安装目录下创建配置文件mongo.cfg, 设置日志文件和数据库存储路径systemLog: destination: file path: D:\DevelopTools\mongodb\logs\mongodb.log storage: dbPath: D:\DevelopTools\mongodb\data安装 MongoDB服务通过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。mongod.exe --config "D:\DevelopTools\mongodb\mongo.cfg" --install启动MongoDB服务net start MongoDB关闭MongoDB服务net stop MongoDB移除 MongoDB 服务mongod.exe --remove启动mangodb客户端mongo默认端口为: 27017数据表和集合操作链接数据库 mongodb://admin:123456@localhost/data1显示数据库show dbs进入数据库use 指定数据库创建数据库: 没有newdata则创建, 有则进入use newdata删除数据库use newdata db.dropDatabase()查看当前集合show collections创建集合db.createCollection(name, options)参数说明:name: 要创建的集合名称options: 可选参数, 指定有关内存大小及索引的选项删除集合db.collection.drop()数据操作新增数据插入数据db.newdata.insert({"键":"值"})如果中文提示错误2018-03-19T11:46:07.875+0800 E QUERY [thread1] malformed UTF-8 character sequence at offset 24先设置cmd的编码chcp 65001插入文档db.COLLECTION_NAME.insert(document) 或 db.COLLECTION_NAME.save(document)save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:db.collection.insertOne( <document>, { writeConcern: <document> } )db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:db.collection.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: <document>, ordered: <boolean> } )参数说明:document:要写入的文档。writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。ordered:指定是否按顺序写入,默认 true,按顺序写入。可以为数据添加一个变量再插入> document=({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'insmoin', url: 'http://www.insmoin.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }); db.col.insert(document)查找数据查看数据db.newdata.find() show dbsdb.collection.find(query, projection)query :可选,使用查询操作符指定查询条件projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:操作格式范例RDBMS中的类似语句等于{<key>:<value>}db.col.find({"by":"菜鸟教程"}).pretty()where by = '菜鸟教程'小于{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50小于或等于{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50大于{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50大于或等于{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50不等于{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。语法格式如下:>db.col.find({key1:value1, key2:value2}).pretty()ongoDB OR 条件语句使用了关键字 $or,语法格式如下:>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()修改数据update() 方法用于更新已存在的文档。语法格式如下:db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )参数说明:query : update的查询条件,类似sql update查询内where后面的。update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。删除数据remove() 方法的基本语法格式如下所示:db.collection.remove( <query>, <justOne> )如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )参数说明:query :(可选)删除的文档的条件。justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。writeConcern :(可选)抛出异常的级别。如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)其他操作条件判断MongoDB中条件操作符有:(>) 大于 - $gt(<) 小于 - $lt(>=) 大于等于 - $gte(<= ) 小于等于 - $lte排序在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。>db.COLLECTION_NAME.find().sort({KEY:1})索引MongoDB使用 createIndex() 方法来创建索引。注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。语法createIndex()方法基本语法格式如下所示:>db.collection.createIndex(keys, options)Python使用MongoDB安装驱动 PyMongo pip3 install pymongo使用import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["skin"] mycol = mydb["skin"] mcol.find_one() for i in mcol.find(): print(i)插入数据mcol.insert_one(onedata) # mcol.insert_many(datas) #插入多个数据查询数据d = mcol.find({"id":"1545"}) for i in d: print(i)
2018年05月07日
1,186 阅读
0 评论
0 点赞
2018-05-03
Django项目部署简单记录
前几天买了阿里云的Linux服务器ubuntu16.04,一路搭建环境和部署过程搞了2天多,可以说是神坑无数,最有意思的网上的很多博客是叫踩坑记录,结果照着这些方式去搞出现了很多奇怪的问题,估计也和版本不同有关。这里为了避免少走一些弯路,我就来记录一下整个过程(这里都是默认root用户远程登录下进行操作,项目名为DjangoTest)。Python环境的配置因为Python环境都是Linux系统上面自带的,我这里项目用的设Python3.6,安装的过程就不多说了,这里基本没什么问题,安装好后只需把安装目录链接到系统自带的python3(系统自带的是Python3.5)即可。本来这里应该没什么问题的,但刚这个项目需要请求https的链接,因为在本地的时候会这里是不会出问题的,但是一旦放到服务器端,坑也就来了。请求时直接返回这么一句异常SSLError("Can`t connect to HTTTPS URL because the SSL module is not available")) 可以看到用到是python中的ssl模块不存在,直接去安装好相应的openssl模块后,还是抛出这个异常。于是不停的去Google和百度,过程中也是按照类似的答案,结果还是没能解决这个问题。最后我就卸载了Python3.6, 直接用3.5的环境去运行,这个问题才得以解决。 具体应该是因为系统默认的是加载已存在的ssl模块,用3.6版本的虽然也依赖了,但是并不会识别,发现不是来自默认Python环境中自带的,就无法加载。这里感觉也是能配置的,但事实就是我不知道多少次的卸载重装,按照各种方式去安装和依赖,还是出现同样的问题,好在3.6版本的项目在3.5上还是基本兼容的,虽然暴力,但不失为一种办法。(如果哪位有更好的解决办法,欢迎给我留言)这里完成后就是Python虚拟环境容器的安装和环境变量的配置$ pip install virtualenvwrapper 如果报本地不存在,就先更新下源$ apt-get update 安装完成后直接启动服务/etc/init.d/mysql start /etc/init.d/mysql stop /etc/init.d/mysql restart 然后直接输入mysql进入数据库后$ use mysql 更改mysql密码update user set Password = PASSWORD('你的密码') where User ='root'; 然后设置外部ip访问权限GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION; FLUSH PRIVILEGES; 这里完成后 重启一下 ,然后还需要修改一下配置文件中绑定的地址vim /etc/mysql/mariadb.conf.d/50-server.cnf 这样就能完成数据库的远程连接了。 注意: 如果Django项目中用到Mysql的话,需要在服务器端的Python虚拟环境下安装一下$ pip install mysqlclient 可能会安装出错,因为缺少一些依赖包,安装一下$ apt-get install libmysqlclient-dev 然后重新安装mysqlclient,这样配置就完成了。uwsgi的安装和配置uwsgi也是一种web服务器,这里就不多介绍了,直接开始安装$ pip install uwsgi 可以先来测试一下$ uwsgi --http 0:80 --module DjangoTest.wsgi 然后使用配置文件的方式来启动django项目,可以直接在项目的目录下新建一个uwsgi.ini文件# mysite_uwsgi.ini file [uwsgi] # Django-related settings # 项目根目录的路径 chdir = /你的路径/DjangoTest # Django's wsgi file module = DjangoTest.wsgi # the virtualenv (full path) # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = :8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true # 虚拟环境的目录 pythonpath = /你的虚拟环境的路径/lib/python3.6/site-packages/ 配置文件写好后,其实我们是可以直接用uwsgi就能完成部署的,使用命令$ uwsgi -i uwsgi.ini 如果端口号被占用,就直接使用命令查看占用情况$ lsof -i :8000 然后使用命令,销毁这些进程$ killall -9 uwsgi 但是为了提高扩展性,我们继续下面的步骤Nginx的安装与配置nginx是一个强大的中间件,我们直接把它作为对外的服务接口。 开始安装$ apt-get install nginx 然后看看启动、停止和重启命令/etc/init.d/nginx start /etc/init.d/nginx stop /etc/init.d/nginx reload 这里注意,其它配置文件不要乱改!如果安装完成不能正常启动的话可以重启服务器看看。没问题的话,我们可以在项目目录下新建一个nginx.conf文件,然后按照下面的方式配置# the upstream component nginx needs to connect to upstream django { #django项目的端口号 和uwsgi里面的端口号保存一致 server 0.0.0.0:8000; # for a web port socket (we'll use this first) } # configuration of the server server { # nginx服务的端口号 不用修改 listen 80; # the domain name it will serve for # 这里可以填写你的ip地址或者域名 server_name www.test.com; charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Django media location /media { alias /你的路径/DjangoTest/media; # 指向django的media目录 } location /static { alias /你的路径/DjangoTest/static; # 指向django的static目录 } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include uwsgi_params; # the uwsgi_params file you installed } } 配置写好后,就需要把它链接到Nginx的启动配置文件中,$ ln -s /你的目录/DjangoTest/nginx.conf /etc/nginx/conf.d/ 配置完成后,再去加载一下uwsgi文件。总结配置好后,直接输入IP地址或者解析到该IP的域名就能成功访问到Django项目了,这样你也会发现,通过nginx我们可以轻松地配置和部署多个环境不同的站点,只需要把配置文件写好后放入nginx的启动文件中。 最后来整理一下整个访问的过程1.使用nginx作为外部接口,直接处理发送过来的请求,如果是静态请求,就直接根据配置的静态文件目录,返回相应的静态资源。 2.如果是动态请求,就通过配置文件将请求转移到uwsgi,uwsgi又会将接受到的请求传递给wsgi(Django项目默认通过wsgi启动服务的),wsgi就会根据请求来调用Django项目中的逻辑来处理请求。 3.处理完成后,又将结果返回给uwsgi,然后uwsgi又继续将结果返回给nginx 4.最后Nginx将处理后的结果返回给用户
2018年05月03日
6,329 阅读
0 评论
0 点赞
2018-05-03
思维导图Xmind转移到幕布
幕布这类工具是什么,是可缩进可排序的符号列表大纲工具,类似的有Workflowy,Dynalist和Outliner,将线性逻辑以大纲的形式呈现出来,可以体现层级和先后关系。Xmind这类工具是思维导图,以平面展开的发散图来将逻辑呈现出来。不仅可以体现层级和先后关系,还可以体现层级与层级之间的关系,甚至还有更多花样。从思维导图的层面来看,幕布这类大纲工具是包含于思维导图工具的幕布最强大的还是支持手机电脑多个设备同步, 免费版也能用得很爽点击此链接注册或者扫描下面的二维码还可以免费获得15天的高级版下面是xmind转移到幕布的教程1.打开xmind文件, 选择导出2.选择导出为FreeMind会得到一个以.mm为后缀的文件3.打开幕布,在新建那选择导入4.选择刚才xmind导出的文件, 打开5.打开完成后, 就成功导入到幕布了只会自动同步到服务器, 然后就可以在各个设备上浏览编辑了6.点击左上角的图标可以以思维导图的方式浏览, 付费用户还可以选择导出等一些操作
2018年05月03日
5,343 阅读
0 评论
2 点赞
2018-05-02
跨站脚本攻击XSS的防范
漏洞概述XSS 是指攻击者在网页中嵌入客户端脚本,通常是 JavaScript 编写的恶意代码,当用户使 用浏览器浏览被嵌入恶意代码的网页时,恶意代码会在用户浏览器上执行。XSS 属于 Web 前端攻击,包括但不限于普通用户,网站管理员如果被攻击,攻击装可 以劫持管理员的身份度网站服务器端进行文件管理,数据管理等操作。漏洞原理XSS 攻击是在网页中嵌入客户端恶意脚本代码,这些恶意代码一般使用 JavaScript 编写 JS(JavaScript 简称)可以用 XSS 盗取用户 Cookie、改变网页内容、URL 跳转到恶意网站、监 控键盘记录、甚至 GetShell 等。漏洞利用xss 分为3种 反射性 ,存储型 ,DOM型反射性xss也称非持久性xss,是最容易出现的一种xss例子:攻击者使用 XSS 反射型漏洞盗取管理员 cookie 步骤。1:用户小 a 正在上 www.abc.com 论坛看帖子。2:攻击者发现 www.abc.com/xss.php 存在反射型漏洞,然后精心构造 JS 代码,此代码可以 盗取用户 cookie 发送到指定站点 www.hacker.com3:攻击者将带有反射型 XSS 漏洞的 URL 通过站内短信发给用户小 a,标题为引起小 a 好奇 心的内容,目的是为了让用户小 a 单击链接。4:假设用户小 a 单击了带有 xss 漏洞的 url,会把自己的 cookie 发送到网站 www.hacker.com5:攻击者接受到用户小 a 的 会话 cookie,利用 cookie 以小 a 的身份登录 www.abc.com 从 而劫持小 a 的登录网站凭据进行其它攻击。存储型 XSS 存储型 XSS 又被称为持久性 XSS,是最危险的一种跨站脚本。 允许用户存储数据的 Web 应用都可能出现存储型 XSS 漏洞,当攻击者提交一段 XSS 代码后,被服务端接受并存储,当攻击者再次访问某个页面时,这段 XSS 代码被程序输出到浏 览器造成 XSS 跨站代码攻击,这就是存储型 XSS。 存储型 XSS 与反射型 XSS、DOM 型 XSS 相比,具有更高隐蔽性,危害性也更大,它们最 大区别在于反射型 XSS 与 DOM 型 XSS 执行都必须依靠用户手动去触发,而存储型 XSS 不需 要。另外反射型 XSS 由于默认 IE 8 及以上浏览器,其它现代浏览器例如 chrome,firefox 等 默认已经开启拦截反射型 xss 漏洞,并且随着浏览器补丁不断升级,也修复了绝大多数绕过 代码。以下是 IE 浏览器防护反射型 XSS 漏洞选项: 以下是一个常见存储型 XSS 场景示例: 在测试是否存在 XSS 时,首选要确定输入点与输出点,例如,我们要在留言内容上测试 XSS 漏洞,首先要寻找留言内容输出(显示)的地方在标签内还是在标签属性内,或者其它 地方,如果输出的数据在属性内,那么 XSS 代码是不会被执行的。如:alert(1)” /> 以上 JS 代码虽然成功插入到了 HTML 中,但却无法执行,因为 XSS 代码出现在 Value 属 性中,被当做值来处理,最终浏览器解析 HTML 时,会把数据以文本的形式输出在网页中。 知道了输出点后,可以根据相应标签构造 HTML 代码来闭合,插入 XSS 代码为 “/>alert(1)”,最终在 HTML 文档中为:alert(1)” /> 这样就可以闭合 input 标签,使输出的内容不在 Value 属性中,从而造成 XSS 漏洞。 知道了最基本的测试原理后,下面看看具体的存储型漏洞 1:添加正常留言,昵称为 xxser,留言内容为“HelloWord”,查看前端源代码xxserHello World2016-10-11 11:27:38 2:如果现实区域不在 HTML 属性内,则可以直接用 XSS 代码注入。如果不能确定输出具体 位置,可以用模糊测试方案,代码如下:alert(/stored xss/)普通注入 "/>alert(/stored xss/)闭合标签注入 '">alert(/stored xss/)闭合标签注入 盗取 cookie 的 js 代码后,重新加载留言页面,XSS 代码被浏览器执行。 攻击者将带有 XSS 代码的留言提交到数据库,当用户查看这段留言时,浏览器会把代码认为 正常的 JavaScript 代码来执行。所以,存储型 XSS 具有更高的隐蔽性检测 XSS手工检测:① 可得知输出位置 输入一些敏感字符,例如“<、>、”、’、()”等,在提交后查看 HTML 源代码,看这些 输入的字符是否被转义。在输出这些敏感字符时,很有可能程序已经做了过滤,这样在寻找这些字符时就不 太容易,这时可以输入“AAA<>”’&”字符串,然后在查找源代码时直接查找 AAA 比较 方便。② 无法得知输出位置 很多 Web 程序源码是不公开的,这时在测试 XSS 时就可能无法得知输入数据到底在什 么地方显示,比如测试留言吧是否存在 XSS,在留言后,可能需要经过管理员审核才能显 示,这种情况无法知道数据在后台管理页面处于何种状态,例如: 在标签中:XSS Test在标签中:对这种情况通常会输入“”/> xss test”来测试。2:工具检测使用 Appscan,Burp Suite 或浏览器 Web 渗透插件 hackbar 等均可。工具的局限性在于如果提交测试代码输入框需要输入验证码或者短信,工具是无法识别 各类验证码而顺利提交攻击代码的。修复漏洞cookie 设置HTTPonlysetcookie($name, $value, $expire, $path, $domain, $secure, TRUE) //>=5.2 header ("Set-Cookie: hidden=value; httponly", false); / ≤ PHP 5.1 /第二种,一个函数搞定htmlspecialchars($html);
2018年05月02日
1,455 阅读
0 评论
0 点赞
2018-05-02
比Xshell好用国产SSH客户端 FinalShell
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能: 免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿透.官网: http://www.hostbuf.com/Windows版下载地址: http://www.hostbuf.com/downloads/finalshell_install.exeMac版,Linux版安装及教程: http://www.hostbuf.com/t/1059.html双边TCP加速教程,轻松跑满带宽主要特性:多平台支持Windows,Mac OS X,Linux多标签,批量服务器管理..支持登录Ssh和Windows远程桌面..漂亮的平滑字体显示,内置100多个配色方案..shell,sftp同屏显示,同步切换目录..命令自动提示,智能匹配,输入更快捷,方便..sftp支持,通过各种优化技术,加载更快,切换,打开目录无需等待..服务器网络,性能实时监控,无需安装服务器插件..内置海外服务器加速,加速远程桌面和ssh连接,操作流畅无卡顿..双边加速功能,大幅度提高访问服务器速度..内存,Cpu性能监控,Ping延迟丢包,Trace路由监控..实时硬盘监控..进程管理器..快捷命令面板,可同时显示数十个命令..内置文本编辑器,支持语法高亮,代码折叠,搜索,替换..ssh和远程桌面均支持代理服务器..打包传输,自动压缩解压..免费内网穿透,无需设置路由器,无需公网ip
2018年05月02日
7,082 阅读
1 评论
5 点赞
2018-05-02
Snipaste 屏幕截图软件超级利器
原贴 https://www.v2ex.com/t/295433Snipaste 是一款开发了三年精心打磨出来、简单易用却又强大到让人惊叹的免费屏幕截图软件!Snipaste 名字拆分开来是「截图+贴图」的意思,它并不仅是个普通的截屏软件那么简单。截图:贴图,即是使图片成为一个窗口并置顶显示:贴图窗口可以旋转、缩放、半透明、鼠标穿透:以上功能也许并不新奇,但 Snipaste 还有很多特别的地方。精确控制截图范围:截图记录回放:是的,不只是回放全屏的截图,之前截图中的画图过程也能重现。取色(不只是显示取色框,能复制当前像素点的 RGB 值):取色之后,还能把颜色贴出来(同时可得到各种颜色格式的转换):普通的纯文本,可以转换成图片:HTML 格式的文本,也可以:配合支持 HTML 格式复制的代码编辑器食用更佳:图片编辑功能不止在截图时可用,贴图窗口亦可:有马克笔、马赛克、高斯模糊、橡皮擦功能:文字可旋转:当然,截图和贴图还可以结合得更紧密。截图后复制到剪贴板里的图片,贴出来可以就在原来截图的位置:也可以一步到位:还有炫酷一点的,在贴图窗口播放 GIF :不喜欢默认的蓝色界面也没关系,主题色任你选,通知栏图标也随你定制:换个截图遮罩的颜色:以上即是对基本功能的介绍,心动了吗,官网在这里:snipaste.com绿色,无须安装。另外还有很多隐藏特性,看看你是否能发现。(以上动图使用 LICEcap 制作,按键显示为 KeyCastOW)关于安全Snipaste 保证:无广告不写注册表不会往除程序主目录和 startup (启动) 文件夹之外的其他地方写入任何文件不上传任何数据现阶段也不会下载任何数据,但以后要加上自动更新功能。有些同学可能会问了,既然现在不需要任何网络连接,为什么程序包里还有一个 Qt5Network.dll ?好问题!这个模块是因为用了 SingleApplication 的代码,它使用 QLocalSocket 和 QLocalServer 来实现防止程序多开。防止多开的主要考虑是,多开的情况下,有一些程序逻辑就不好处理了。对于普通用户,也没有多开 Snipaste 的必要。QQ 截图?看到上面第一张图,你可能想到了 QQ 截图。但事实上, Snipaste 的截图和 QQ 截图最大的相同点就两个:在截图退出之前就编辑图片两段式的工具条好吧,我也承认,它们就是 QQ 截图的最大特点。其实,我只要把工具条的样式改一改,也许就不像 QQ 截图了,但我想了很多方案,还是觉得这两段式的工具条比较合理……不过,真要细究起来,如果说 Snipaste 的截图和 QQ 截图相同 /相似的地方有 5 点,那我可以列出它们 15 点不同的地方,这还是保守的说法。比如, QQ 截图只能自动选取到窗口区域,而 Snipaste 可以高效地自动选取按钮、文字等界面元素。注:对 Chrome 窗口进行元素选取需在 chrome://accessibility/ 打开 Global accessibility mode , Firefox 则无需额外设置。比如, QQ 截图在你画了图之后就不再允许改变截图区域了, Snipaste 可以。比如,在 QQ 截图里要改变截图区域,需要把鼠标放在截图区域的边界上, Snipaste 不用:比如, QQ 截图在你确定了截图区域之后,取色框就不再显示了,而 Snipaste 随时都可以唤出取色框。比如,在 QQ 截图的取色框里,是没有显示截图边界的,这就使得你没法精确地确定截图边界,而 Snipaste 可以,并且可以用键盘像素级地控制截图区域。还有很多很多细节,不再多说,如果它正好切中了你的需求,我很荣幸。但也会有人说,我并不需要那些特性啊,比如截图的时候自动选取界面元素就很烦人,没问题, Snipaste 提供了开关。当然,如果还有你认为需要改进的地方,不管是多么小的细节,请告诉我,让我们把 Snipaste 变得更好。三年开发背后的故事你可能会觉得,以上的功能看起来也没什么难度嘛,为什么开发了三年?嘛,这个,说好听点,我只是利用业余时间在开发,说不好听的,因为拖延症,毕竟开发它没人给我 deadline ……不过说真的,独立开发一个软件真的不是想象中那么容易。抛开写代码不说(看起来简单的功能,实现也许很艰难),还需要考虑设计、交互、产品定位等等,有时候应不应该实现某个功能,应不应该加某个选项,都能纠结好几天……设计也许是程序员独立开发作品最头疼的了。 Snipaste 的画图工具条上的图标有的是免费的(IcoMoon, Icons8),有的是我在免费图标的基础上修改的,有的是完全自己用 Inkscape 画的,虽然也没几个,但其实费了我不少时日…… app 图标也是自己设计,用 Inkscape 画的,自己想了十几个稿然后推翻,主要考虑是要和软件的功能相关,以及放在通知栏里好看、显眼。现在这个设计的含义是,十字代表截图(取色框里就有个十字),书签图案表示将截图收藏起来(贴回到屏幕上)。说起来,三年前这个软件其实并不是截图软件,当时只有贴图功能,就是把一些图片放在桌面置顶显示,当做备忘,后来加上半透明显示,这样可以前后对比图片。 后来是觉得如果能把截图贴在原来截图的位置应该挺好玩的,以及不想为了截图而去开 QQ ,以及自己对截图有各种奇怪的需求,而 QQ 截图无法满足我,我也不能要求 QQ 截图听到我的声音、为我而改变,所以才把截图功能给实现了。所以,你大概看出来了,这就是一个我自用的软件。事实上,这三年来,用过这款软件的人也就十来个吧,好朋友、师兄姐、家里人,还有我姐的同事……他们都给我提了不少意见,非常感谢他们。也大概因为是自用,所以软件写出来之后一直都没有很大的信心和动力把它公开发布。但怎么说也自用了两年多了,平时遇到的 bug 基本都修复了,功能也在不断改进,所以现在质量还是有保证的。 而且,不同于腾讯的 QQ 截图, Snipaste 的开发者只有我一个,如果你有什么需求,我还是很可能帮你实现一下的。另外,我还要重申一下,虽然截图很好用(……),但是这软件的本体真的是贴图,活用它,将能够大大提高你的生产力。特别是程序员和设计师,希望你们能体会到它的妙处(特别特别适合多屏用户!)。关于后续开发我接下来几个月都没什么时间(论文压力 + 校招),每天能花在 Snipaste 的时间很有限,不过你们提的意见都会被听到,容易改的我会马上改,不好改但严重影响使用的也会马上改,其他的就只能先记录着了。Windows 版目前在 Win 10 和 Win 7 上测试过, Win 8 应该也没问题, xp 就不太清楚了,还请用这些系统的用户反馈一下。Mac 版因为是用 Qt 写的,所以跨平台并不是问题(其实平台相关的代码也不少)。之前有几个旧版已经在 Mac 上编译过了,但运行起来多少都存在一些问题,所以还是需要一些时间才能出 Mac 版。Linux 版Mac 版之后我会出一个 Linux 版,但要等上更长的一段时间,因为还未尝试过在 Linux 上编译它。最后Sniapste 完全免费,无任何功能限制。Snipaste 易于使用,在官网首页了解一下基本的快捷键即可。另有一些隐藏特性可帮助你进一步提升效率,关于这些我正在整理,几天后更新到网站上。Snipaste 提供了丰富的个性化选项,每一个选项鼠标悬停后都有解释,请随意把玩(默认设置里除了开机启动没勾,其他都是我自己在用的设置,所以不愿折腾也没关系)。如果你只需要截图功能(我表示很遗憾),取消贴图的快捷键即可,你将不会为贴图这个功能付出任何额外的代价。这是我第一个公开发布的软件,没什么经验,设计、网站搭建、网站文案都是业余的,不足之处欢迎大家批评指正。目前英文网页的下载链接是 Bitbucket 的,原因是直链、有下载次数统计,但朋友反应有些地区下载极慢,所以把中文网页的下载链接换成了阿里云的,两者的文件是一样的。但不知道有什么更好的方案?
2018年05月02日
4,281 阅读
0 评论
11 点赞
2018-05-01
CentOS解决不能联网的问题
CentOS解决不能联网的问题 症状: CentOS不能联网进入目录cd /etc/sysconfig/network-scripts/ 输入ls查看文件列表, 找到网卡配置文件,我虚拟机的网卡名称为ens33 编辑vi 按i进入编辑模式, 编辑ifcfg-ens33文件的最后一行,将ONBOOT=no改为ONBOOT=yes,按esc退出编辑模式, 输入:wq保存退出 重启network:$ server network restart pingi下百度能不能ping通$ ping www.baidu.com 如果能ping通, 说明网络已经可以连接了
2018年05月01日
4,973 阅读
0 评论
0 点赞
2018-04-19
CentOS编译安装Nginx
1. 环境准备# 更换YUM源,centos默认源是国外的网站,下载会比较慢 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache # 安装编译环境,如果安装过了,就不需要再安装了 yum -y install gcc* 2. 安装pcre库,如果不安装pcre库,Nginx无法使用rewrite模块,在编译安装过程也会报错# 查询pcre库是否安装 rpm -qa|grep pcre yum -y install pcre pcre-devel # 安装完之后查询一下是否安装成功,如果能够看到pcre和pcre-devel包就可以了 rpm -qa|grep pcre 3. 安装nginx# 创建一个software/目录用来放软件包 mkdir -p /opt/software # 创建安装目录 mkdir -p /application/nginx-1.14.0 # 下载nginx安装包 cd /opt/software wget -q http://nginx.org/download/nginx-1.14.0.tar.gz # 创建一个nginx用户 useradd nginx -s /sbin/nologin -M //创建一个nginx用户 # 解压 tar xvf nginx-1.14.0.tar.gz cd nginx-1.14.0 # 安装 ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.14.0 --with-http_stub_status_module --with-http_ssl_module # 如果安装报./configure: error: SSL modules require the OpenSSL library 需要安装openssl-devel,安装完之后再执行一下上一条命令 yum -y install openssl-devel make && make install # 创建软链接是为了以后如果要升级,应用程序中如果有引用Nginx路径,不需要做任何更改,访问的还是原来的路径/application/nginx ln -s /application/nginx-1.14.0/ /application/nginx # 查看链接状态 ls -l /application/nginx 注意:编译安装Nginx软件时,还可以使用./configure --help查看相关参数帮助4. 检查安装结果# 启动nginx服务 /application/nginx/sbin/nginx netstat -lntup|grep 80 5. 在浏览器里面输入nginx服务器IP地址发现并没有成功,原因是被centos防火墙拦截了, 这个时候, 我们需要关闭防火墙6. 关闭防火墙CentOS7版本后防火墙默认使用firewalld,因此在CentOS7中关闭防火墙使用以下命令,# 临时关闭 $ systemctl stop firewalld # 禁止开机启动 $ systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.123456 当然,如果安装了iptables-service,也可以使用下面的命令,$ yum install -y iptables-services # 关闭防火墙 $ service iptables stop Redirecting to /bin/systemctl stop iptables.service # 检查防火墙状态 $ service iptables status Redirecting to /bin/systemctl status iptables.service iptables.service - IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled) Active: inactive (dead) 重新访问就能成功访问了
2018年04月19日
1,395 阅读
0 评论
0 点赞
2018-04-18
Django使用FastDFS文件存储系统
FastDFS服务部署完成后, 可以使用django调用点击进入部署教程Django自带文件存储系统,但是默认文件存储在本地, 要将文件保存到FastDFS服务器上,需要自定义文件存储系统。自定义文件存储系统的方法如下:1)需要继承自django.core.files.storage.Storage,如from django.core.files.storage import Storage class FastDFSStorage(Storage): ... 2)支持Django不带任何参数来实例化存储类,也就是说任何设置都应该从django.conf.settings中获取from django.conf import settings from django.core.files.storage import Storage class FastDFSStorage(Storage): def __init__(self, base_url=None, client_conf=None): if base_url is None: base_url = settings.FDFS_URL self.base_url = base_url if client_conf is None: client_conf = settings.FDFS_CLIENT_CONF self.client_conf = client_conf 3)存储类中必须实现_open()和_save()方法,以及任何后续使用中可能用到的其他方法。 _open(name, mode='rb')被Storage.open()调用,在打开文件时被使用。 _save(name, content)被Storage.save()调用,name是传入的文件名,content是Django接收到的文件内容,该方法需要将content文件内容保存。Django会将该方法的返回值保存到数据库中对应的文件字段,也就是说该方法应该返回要保存在数据库中的文件名称信息。 exists(name)如果名为name的文件在文件系统中存在,则返回True,否则返回False。 url(name)返回文件的完整访问URL delete(name)删除name的文件 listdir(path)列出指定路径的内容 size(name)返回name文件的总大小注意,并不是这些方法全部都要实现,可以省略用不到的方法。 4)需要为存储类添加django.utils.deconstruct.deconstructible装饰器我们在 项目/utils/fastdfs目录中创建fdfs_storage.py,实现可以使用FastDFS存储文件的存储类如下from django.conf import settings from django.core.files.storage import Storage from django.utils.deconstruct import deconstructible from fdfs_client.client import Fdfs_client @deconstructible class FastDFSStorage(Storage): def __init__(self, base_url=None, client_conf=None): """ 初始化 :param base_url: 用于构造图片完整路径使用,图片服务器的域名 :param client_conf: FastDFS客户端配置文件的路径 """ if base_url is None: base_url = settings.FDFS_URL self.base_url = base_url if client_conf is None: client_conf = settings.FDFS_CLIENT_CONF self.client_conf = client_conf def _open(self, name, mode='rb'): """ 用不到打开文件,所以省略 """ pass def _save(self, name, content): """ 在FastDFS中保存文件 :param name: 传入的文件名 :param content: 文件内容 :return: 保存到数据库中的FastDFS的文件名 """ client = Fdfs_client(self.client_conf) ret = client.upload_by_buffer(content.read()) if ret.get("Status") != "Upload successed.": raise Exception("upload file failed") file_name = ret.get("Remote file_id") return file_name def url(self, name): """ 返回文件的完整URL路径 :param name: 数据库中保存的文件名 :return: 完整的URL """ return self.base_url + name def exists(self, name): """ 判断文件是否存在,FastDFS可以自行解决文件的重名问题 所以此处返回False,告诉Django上传的都是新文件 :param name: 文件名 :return: False """ return False 在Django配置中设置自定义文件存储类在Django的配置文件setting.py文件中添加设置# django文件存储 DEFAULT_FILE_STORAGE = '项目名.utils.fastdfs.fdfs_storage.FastDFSStorage' # FastDFS FDFS_URL = '服务器地址:8888/' FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')
2018年04月18日
1,142 阅读
0 评论
0 点赞
2018-04-16
Nginx 解析漏洞
Nginx 解析漏洞 Nginx 0.5.、Nginx 0.6.、Nginx 0.7 <= 0.7.65、Nginx 0.8 <= 0.8.37:以上 Nginx 容器的版本下,上传一个在 WAF 白名单之内扩展名的文件 shell.jpg,然后以 shell.jpg.php 进行请求。 Nginx 0.8.41~1.5.6:以上 Nginx 容器的版本下,上传一个在 WAF 白名单之内扩展名的文件 shell.jpg,然后以 shell.jpg%20.php 进行请求。
2018年04月16日
1,825 阅读
0 评论
0 点赞
2018-04-14
Pycahrm远程调试Django项目
Pycahrm远程调试Django项目blog没几个人看,少了很多动力,不过为了锻炼自己的总结能力,加深自己的记忆,就算是写给自己看也要写下去。废话不多说,进入正题…最近因为需要要把django项目部署到服务器端,又想在本地进行调试,发现了pycharm的远程调试的强大(不得不佩服jetbrains公司),网上搜出来的很多都是零散的,过程中也是踩了很多的坑,于是这里就来记录一下整个过程。 为了方便测试,这里使用的是virtual Box安装的ubuntu17.04。一丶远程连接配置首先需要配置的是ssh服务,ubuntu默认是没有安装openssh-server的,那就进入终端命令 sudo apt-get install openssh-server 然后查看ssh服务是否启动 ps -e|grep -ssh 如果看到sshd的进程就说明已经启动了,只有ssh-agent是没有启动的 然后手动去启动 sudo /etc/init.d/ssh start ssh默认的访问端口是22,可以进入配置文件修改,这里就不多说了,如果修改后了直接进行重启 sudo /etc/init.d/ssh restart 这里就不使用证书的方式进行访问了,直接使用远程登录用户的方式 然后进入pycharm, File->Settings->Deployment可以看到如下界面host填写服务器的公网ip,如果是用的虚拟机的话可以使用来查看ip ifconfig 这里可以使用root用户来连接,依次填入,然后就可以连接了,连接后选择项目在远程主机的根目录,可以直接新建一个。配置完成后,再去配置下Mappings,选择本地项目的根目录就可以了,最后不要忘了Apply。现在就可以把项目直接上传到服务器端了,然后选中项目根目录(切记不是选中某个文件!) 然后点击Tools->Deployment->Upload Default server 这样的话项目就上传完成了。二丶配置远程虚拟环境既然是python项目,自然要用到virtualenv和virtualenvwrapper。 直接使用命令 pip3 install python3-virtualenv 如果安装失败的话,就使用 sudo apt-get install python3-virtualenv 然后安装virtualenvwrapper pip3 install virtualenvwrapper 安装完成后需要配置下环境变量 vim ~/.bashrc 然后把光标移动到最后一行,加入如下两行 export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 保存后重新加载一遍才会生效 source ~/.bashrc 这样的话虚拟环境的配置就完成了 然后可以使用 mkvirtualenv xxx #新建虚拟环境 workon xxx #进入虚拟环境 因为ubuntu下默认的python版本是python2.7的,这里要建python3的环境可以直接使用 mkvirtualenv Test --python=python3.5 接下来是安装项目的扩展包,因为我们之前只是将项目上传到服务器端,但是新建的虚拟环境扩展包为空,我们总不能一个个去安装吧, 这里我们可以把之前的扩展包全部写在一个test.txt文件中,然后进入虚拟环境后使用命令 pip3 install -r test.txt 如果安装速度慢的话,可以使用豆瓣源,这里就不多说了。 这些工作完成后, 然后进入Pycharm File->Setting->Project Interpreter,把项目环境改成远程服务器端的虚拟环境 点击设置按钮addRomte->SSH Credential,填入服务器端的相关信息,然后在ython interpreter path选择在服务器端建立好的虚拟环境,等待加载完成后Apply一下,这样准备工作就完成了。三丶项目相关的配置这里服务器端MySQL的配置就不多说了,这个基本百度出来的方法没什么问题, 把本地数据转移到服务器端可以直接使用Navicate for mysql的数据传输选项。主要记录下django里settings文件的配置,之前在本地进行调试的时候DATABASES里面的host使用的localhost使用的是localhost或者127.0.0.1,但是放到服务器端后要把它修改为服务器的公网ip。 然后还要修改一下这个 ALLOWED_HOSTS = ['*'] 这些都完成后再去Pycharm的Edit Confrgrations中,也就是项目运行的配置环境中修改一下Host,端口默认是8000和Python iterpreter为远程虚拟环境。 然后就可以直接在本地运行服务器端的项目。这样的话使用Pycahrm进行远程调试的整体过程就完成了
2018年04月14日
3,253 阅读
0 评论
0 点赞
1
...
6
7
8
...
12