CENTOS : linux下安装某些软件 如果的当前用户是root,则有可能后面访问这些文件会存在权限问题,所以推荐要以普通用户安装这些软件。没有权限加上sudo就行。用chown 可以修改所有用户/组,最好不要以root用户安装软件,打开防火墙 有的端口不能访问。所以有时候得关闭防火墙或者打开某些端口
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
python-django虚拟环境:
每个项目都有自己单独的环境,所以都得创建一个env
在当前目录创建了.virtualenv的虚拟环境,之后所有项目的env都可以放在这个文件夹下面。
编辑.bashrc时候要指定virtualenv和virtualenvwrapper两个路径,不指定就会使用默认的路径。
我这里virtualenv和virtualenvwrapper都在/usr/local/python3/bin/路径下面
mkvirtualenv -p python3 venvname 利用python3创建虚拟环境
find / -name a* 查找根目录a开头的文件
linux的的默认环境变量/usr/bin/下
创建python软连接 第一个是python3安装路径 系统默认的python2.7的软连接也是/usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python 这样就覆盖了python2.7的软连接 不推荐这样做
pip 和 python 添加软连接之后有时候会显示bash: /usr/bin/pip3: No such file or directory
默认会去环境变量路径找 这时候hash r清除一下缓存就好了
依赖装完才能一次性安装完成python 包括pip3
如果没有安装成功pip3 可以重新装完依赖之后重新编译python重新装 不用卸载
装虚拟环境时候 virtualenvwrapper.sh 中可能需要把python 改成 python3
https://zhuanlan.zhihu.com/p/133400883 详细记录virtualenvwrapper.sh和virtualenv关系
oracle数据库和django运行需要依赖条件
大概安装这个(版本自己看) yum install oracle-instantclient-basic-21.1.0.0.0-1.x86_64.rpm
在.bash_profile中配置
export ORACLE_HOME=/usr/lib/oracle/21/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/21/client64/lib:$LD_LIBRARY_PATH
centos7 安装postgresql 用sudo 替代命令 不要以root用户安装
安装完之后配置两个文件 /var/lib/pgsql/版本号/data/postgresql.conf和pg_hba.conf
listen_addresses = '*' 打开注释 改为*
port=5432 打开注释
# IPv4 local connections:
host all all 127.0.0.1/32 ident
host all all 0.0.0.0/0 md5
django连接时候不能填localhost 要填 IPv4 暂时虚拟机不能连window的postgresql
安装nginx:下载 tar.gz解压之后安装。yum安装nginx.conf有差异。
解决403forbidden nginx.conf首行添加 user root root
像xxx.com这些域名要申请。基本都是付费。有域名nginx就可以配置了。这时候是http请求。
再去申请个证书,有免费的有付费的。再经过nginx配置。就是https请求了。
正向代理:某人向马云借钱,不借,某人的同学刚好认识马云,于是让他的同学向马云借钱,然后再借给某人。OK
反向代理:某人打10086,总部10086没空,于是随便分发深圳部接听服务。OK。
反向代理跟负载均衡相辅相成,总部分发给下面的部门的时候,怎么分,如何分,这就到了负载均衡。
window远程linux工具
Xshell远程连接linux以sftp方式连接 命令行输入help就有很多命令,包括上传和下载文件
MobaXterm远程连接SSH连接和SFTP方式连接。
Redis:centos环境安装教程:https://zhuanlan.zhihu.com/p/34527270
windows下安装redis需要开启redis代码才能访问。当前打开是开启一个cmd窗口,不方便。
这里安装为windows服务。redis-server.exe --service-install redis.windows.conf
然后使用下面命名即可开启停止redis服务。使用界面版的redis还得另外安装
卸载服务:redis-server --service-uninstall
开启服务:redis-server --service-start
停止服务:redis-server --service-stop
重命名服务:redis-server --service-name name
1. 实现如果用户登录连续三次都输错密码。则锁5分钟之后才能再次输入密码登录。如果再次输错。则继续锁10分钟.....django实现此小实例
# redis每次请求浏览后有缓存,下次访问的时候先从redis里面取,然后再从数据库里面取。
# 但是即使数据改了也不会更新,需要手动更新。所以选择合适的场景使用很重要。
# 6379/1, 1是redis的数据库序号,redis默认允许16个数据库,redis不设置数据库序号默认使用的是0。
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
# 连接池数量,如果decode_responses不设置为True的话,使用get_redis_connection读取的数据是bytes,需要decode为utf-8
"CONNECTION_POOL_KWARGS": {"max_connections": 100, "decode_responses": True},
# "PASSWORD": "123456",
}
}
}
class UserLoginView(APIView):
# 不需要登录认证和权限认证
authentication_classes = []
permission_classes = []
@staticmethod
def post(request):
username = request.data.get('username')
password = request.data.get('password')
# __iexact忽略大小写,__exact精确= 都类似like语句
user = User.objects.filter(username__exact=username, is_active=True).first()
if not user:
return Response({"code": 0, "value": "username not exist", "token": ""})
redis = get_redis_connection()
if redis.get(username):
# 锁定之后重新解锁再输入密码只有一次机会
redis.setex("%s_login_times" % username, EXPIRE_TIME * 5, 3)
return Response({"code": 0, "value": "Your account has been locked. Please try again later!", "token": ""})
if user.check_password(password) or user.password == password:
# 更新登录时间
user.last_login = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
user.save()
if redis.get(username):
redis.delete(username)
if redis.get("%s_login_times" % username):
redis.delete("%s_login_times" % username)
token = api_settings.JWT_ENCODE_HANDLER(api_settings.JWT_PAYLOAD_HANDLER(user))
return Response({'code': 1, 'value': user.username, "token": token})
else:
if redis.get("%s_login_times" % username) and int(redis.get("%s_login_times" % username)) >= 3:
redis.setex(username, EXPIRE_TIME, "true")
elif redis.get("%s_login_times" % username):
redis.setex("%s_login_times" % username, EXPIRE_TIME, int(redis.get("%s_login_times" % username))+1)
else:
redis.setex("%s_login_times" % username, EXPIRE_TIME, 1)
return Response({"code": 0, "value": "password error", "token": ""})