session[key]=value
是默认存储在服务器内部的
flask-session
使用步骤:
1/from flask-session import Session
2/设置session的配置信息到app中
class MyConfig(object):
共有四项配置信息
app.config["SECRET_KEY"] = "fdfdfdfd"app.config["SESSION_TYPE"] = "redis"
#指定session的存储类型app.config["SESSION_REDIS"] = StrictRedis()
#指定redis服务器的地址app.config["SESSION_USE_SIGNER"] = True
#设置session的签名信息app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=10)
#设置session在redis中的存储时间
3/读取app中的session配置信息到Session中
目的:使用分布式系统管理源代码,还可以多人协同开发
作者:Linux
上线时间:2005年
工作区:代码的增删改,可以是我们的pycharm
暂存区:临时存放代码的,一旦提交就没有了
仓库区:用来记录所有操作过程的,都会备份成版本,并永久存在
git diff HEAD HEAD^ -- XXX.py
写了xxx.py就是看本文件不同版本的不同,不指定文件,就是所有文件的不同点(注意--和文件名之间有空格)
git init
切换到创建的git文件夹,然后对所建的文件夹进行初始化
git status
查看工作区的状态
git add .或者是文件名
添加工作区的文件到暂存区(文件名变成绿色就是保存到了暂存区,红色代表在工作区)
git commit -m '注释'
将暂存区的内容提交到仓库区
git commit -am '注释'
将工作区-->暂存区--->仓库区
git config user.name '用户名'
设置提交作者的名称
git config user.email '邮箱'
设置提交作者的邮箱
git log/reflog
查看仓库区的版本历史
git reset --hard HEAD^(HEAD~1) 版本号
回退版本
git diff 版本1 版本2 -- 文件名
比较文件不同版本的区别(注意--和文件名之间有空格)
git rm 文件名
使用git删除文件
git reset --hard HEAD^
撤销工作区的内容:git checkout 文件名
撤销暂存区:git reset HEAD 文件名
目的:多个人来维护同一份代码
步骤:
1/先克隆git clone 项目地址
,克隆之后进入到克隆的文件夹中
2/需要改一下名字和邮箱
3/将工作区-->暂存区--->仓库区
4/提交到gitee远程仓库中git push
5/其他人用的时候也需要先克隆
6/然后进入到克隆的文件夹中,也需要改一下名字和邮箱.
7/其他人更改之后提交到远程仓库
8/想看到其他的代码,不需要克隆了,只需要拉下来git pull
命令:
git clone 地址
将远程仓库的代码克隆到本地
git push
将本地仓库的代码推送到远程
git pull
将远程仓库的代码更新到本地
目的:了解冲突的产生过程,以及解决办法
rejected
拒绝
产生原因:就是比如经理和我同时更改,但是经理提交的比较快,经理改正之后,我没有及时的更新服务器,还是之前的版本,然后提交的时候就被拒绝了.我们在提交的时候必须保证本地的版本和服务器的版本是一致的.这个时候我们可能需要将远程的代码pull下来,但是合并之后的文件里面有提示信息,就是经历修改的,和我自己修改的,以及git自动生成的一些提示信息,当出现冲突的时候,去和经理商量冲突的问题是按自己的解决方案还是经理的解决方案,商量之后,可以再提交提交的时候一定不要有一些乱七八糟的提示信息,要不然会出现问题
其实在工作中,每个人都是负责不同的模块,所以冲突问题很少有,所以不能去修改同事的代码.而且我们在工作中,下班的提交要赶紧提交,要不然太晚,出现问题,同事都回家了,没人商量了,减少问题.上班前第一件事就是pull拉下来
冲突的产生:
1/一直写不提交
2/擅自修改同事的代码
目的:当一个大的版本完成之后需要做好记录和备份,可以使用标签
设置本地标签:git tag -a 标签名 -m 描述
推送本地标签到远程:git push origin 标签名
删除本地标签:git tag -d 标签名
删除远程的:git push origin --delete tag 标签名
分支作用:
1/碰到了难题
目的:
开辟一个分支专门解决项目中遇到的难题,方便我们继续进行开发,当解决完了,再将分支合并.
还有一种情况,就是当公司一个新同事来的时候,新建一个分支,让他在分支上开发所需要的功能,如果功能能用,就将这个分支合并到项目里,如果不能用,或者很糟糕,直接删除即可,不会影响项目的开发.
自分支刚开始是和主分支完全一样的,因为是从主分支分离的
合并的操作是从主分支里面进行操作的
代码:
查看当前分支git branch
创建一个分支git checkout -b 分支
切换分支:git checkout 分支名
推送本地分支到远程:git push -u origin 分支名
合并分支:git merge 分支名
(注意:需要在master执行合并操作.)
修改已经commit的注释内容:
1/先切换到想要修改内容的版本
2/然后输入git commit --amend
做对应的修改,control + x退出保存
在程序员里,前台和前端是一个意思.后台和后端也是一个意思.
json数据:"{'name':'zhangsan','age':'10'}"
需要from flask import json
导入一下
1.json转换成字典
dict = json.loads(json)
2.字典转成json:
json = json.dumps(dict)
"""
10,dict和json相互转换
- json数据: "{'name':'zhangsan','age':10}"
- 1.字典转成json
- json = json.dumps(dict)
- 2.json转成字典
- dict = json.loads(json)
"""
# import json
from flask import json
#1.字典转成json
dict = {
"name":"banzhang",
"age":29
}
json2 = json.dumps(dict)
print(json2)
print(type(json2))
#2.json转成字典
dict2 = json.loads(json2)
print(dict2)
print(type(dict2))
目的:快速找出bug(臭虫/问题/缺陷)找bug的过程称为debug
在pycharm中用debug打断点的时候,类名或者类里面,不要打断点.视图函数名那一行也不要打断点,可以打在视图函数的内部非注释的地方.
控制台frames中点一下第一个我们工程的名字,可以快速找到断点.
frames左侧两个圆那个按钮点一下会找到所有的断点,在新窗口中减号是删除的意思.
添加开源许可证,保护我们的东西不被别人商业化,
如果有的文件是不需要提交的,可以设置忽略文件,比如.idea是我们的pycharm配置信息,在目录下输入touch .gitignore
然后打开.gitignore文件,将文件名放入这个文件里,然后提交就好了.(还有.pyc和.pyo(连接c语言)和.pyd(动态库)一般也是忽略的,可以统一写成.py[cod])
我们在pycharm中如果写完后,可以直接提交到git中,在菜单栏中依次点击
VCS---->commit
目的:为了在项目中用来存储新闻数据以及用户数据
from flask_sqlalchemy import SQLAlchemy
...class Config(object):
"""工程配置信息"""
DEBUG = True
# 数据库的配置信息
SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/information"
SQLALCHEMY_TRACK_MODIFICATIONS = Falseapp.config.from_object(Config)
db = SQLAlchemy(app)
目的:缓存访问频率高的内容,存储session信息,图片验证码,短信验证码
import redis
...class Config(object):
"""工程配置信息"""
... # redis配置
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379app.config.from_object(Config)
db = SQLAlchemy(app)
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
目的:将来用来保存用户的登录信息
from flask_session import Session
...class Config(object):
"""工程配置信息"""
SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"
... # flask_session的配置信息
SESSION_TYPE = "redis" # 指定 session 保存到 redis 中
SESSION_USE_SIGNER = True # 让 cookie 中的 session_id 被加密签名处理
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 使用 redis 的实例
PERMANENT_SESSION_LIFETIME = 86400 # session 的有效期,单位是秒app.config.from_object(Config)
...
Session(app)
目的:保护app,防止CSRF攻击
校验的请求方式:POST,PUT,PATCH,DELETE
from flask_wtf.csrf import CSRFProtect
...
app.config.from_object(Config)
...
CSRFProtect(app)
同源策略:不同网站之间的cookie不共享
xss可以获取到不同网站之间的cookie