- urls.py
- 路径与视图函数映射关系 ---- url控制器
- views.py
视图函数, 固定有一个形式参数: environ -- 视图函数
- templates 文件夹
html 文件 ----模版
- models
在项目启动前, 在数据库中创建表结构 --- 与数据库相关
- main.py
启动文件, 封装了 socket
Django 初始化创建
django-admin startproject prjname
cd prjname
python manage.py startapp app # 创建子项目
MTV 模式
- M : model
- T : templates
- V : view
目录结构
blog -- 与应用相关的文件夹
- admin.py
- apps.py
- model.py ---- 数据库相关
- views.py ---- 视图
- test.py
manage.py --- Django 相关文件
templates -- html 文件夹
django_blog # 跟整个项目相关的 全局配置
- asgi.py
- settings.py
- urls.py -- 路由控制
- wsgi.py
url控制总结
url 是 Django程序入口
- 1 url 路径匹配
- 2 匹配成功找到对应视图函数
- 3 有名分组, 将有名的分组变量, 传入视图函数
- 4 分发, 解耦, include 将urls 分发到每一个应用中,
- 5 反向解析, 给每一个url起一个别名(nickname), 以便于后序更改URL时 只需要更改一个位置
- 6 命名空间, 解决不同应用间命名冲突的问题, include("app.urls", "namespaceName")
reverse("namespaceName:nickname", args=((args1, args2, ....))
SQL
生成表模型
- python.exe .\manage.py makemigrations 生成表
- python.exe .\manage.py migrate
数据库迁移
# 根据数据库迁移文件生成对应SQL语句并执行
python manage.py migrate
# 初次执行时为了先把默认Django需要的数据库创建出来
python manage.py makemigrations # 创建数据库迁移文件
# 这次执行是为了创建app中的class模型类的迁移文件
跨域问题
1 同源策略: 请求的url地址, 必须与浏览器上的url地址处于同域上, 也就是域名, 端口, 协议相同
2 CORS: 跨域资源共享 允许不同的域来我的服务器获取数据
csrf: 跨站请求伪造 xss: 跨站脚本攻击
3 CORS 请求分成两类: 简单请求(Simple request) 和 非简答请求(not-so-simple request)
简单请求:
(1)请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencpded、multipart/form-data、
text/plain
# 如果发送post请求, 数据格式是json --> 非简单请求, 非简单请求发两次, 一次 options请求 一次真正的请求
跨域处理
pip install django-cors-headers
- 注册 app : 'corsheaders'
- 配置中间件 : 'corsheaders.middleware.CorsMiddleware',
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
"*"
)
CORS_ALLOW_METHOD = (
'DELETE',
'GET',
'POST',
'PUT',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-wIth',
'Pragna',
)
前后台打通
# 1 前台可以发送 ajax 的请求 axios
# cnpm install axios
git工作流程
- 工作区
- 暂存区 git add
- 版本库 git commit -m
- 回滚 git checkout | git reset HEAD | gie reset -hard 版本号
远程仓库
github 码云(国内) 公司内部 gitlab
git命令
git init 文件夹名 // 文件夹下路径全被管理
git status
git add 文件名 // 将文件提交到暂存区 git add . 添加管理下的全部文件到暂存区
git commit -m '注释' // 提交到版本库 将暂存区里面的所有文件都提交到版本库 暂存区清空
- 增加作者信息(全局配置)
git config --global user.email '1@qq.com'
git config --global user.name 'mc'
- 增加坐着信息(项目配置)
git config user.email '1@qq.com'
git config user.name 'mc'
git log // 查看版本管理日志
git reset --hard 版本号 // 返回指定版本的状态
git reset HEAD . // 将提交从暂存区拿出来, 基本不会使用
pre-commit
$ pip install pre-commit
$ pre-commit --version
pre-commit 2.1.1
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
颜色区分
红色 未被管理
绿色 提交到暂存区
忽略文件
- 指定某些文件或者文件夹不被 git 管理
- 在项目根路径, 跟 .git 文件夹一个路径, 新建 .gitignore 在里面配置
- 语法
- # 号是注释
- 文件夹名字 表示文件夹不被管理
- 空文件夹不被管理
- .gitignore
/dist 表示根路径下的dist文件夹不被管理
*.py 表示后缀名为 py 的文件 都被忽略
*.log* 日志文件忽略(日志轮转, 不用提交)
分支 *** 作
git branch 查看所有分支 如果是绿色 则表示在当前分支上
git branch 分支名 创建分支
git checkout 分支名 切换分支
git branch -d 分支名 删除分支 必须切换到其他分支才能删除当前分支
git checkout -b 分支名 创建并切换到分支
git merge 分支名 合并分支
eg: 将 dev 分支合并到 master分支, 切换到master分支 执行合并dev分支的命令
出现冲突的两种情况
- 分支合并
- 两个分支更改了同一文件的同一行
- 第一个提交的没有事情
- 第二个提交的会出现冲突
冲突解决
- 协同开发出现冲突, 如何解决
1 删除你的代码
2 删除他们的代码
3 合并你们的代码
- 合并分支出现的冲突
分支: 本地分支 远程分支
冲突一
2 创建本地分支 git checkout -b dev
3 将本地分支提交到远程 git push origin dev
冲突二
- dev_bug 分支改了文件
- dev 改了同样的文件同样的位置
- 合并 ===> 冲突
- git merge dev_bug // 在dev上 *** 作
- 解决冲突 分析冲突代码 保留最后代码
- git add. git commit
- 冲突解决
冲突三
- 线上合并分支出现问题 只能 👇
- 手动先下合并代码并提交到远程
- 解决方法同冲突二
git 远程连接
- 码云(国内, 连接块)
- 注意: 新建仓库的时候 不要勾选 read 初始化仓库
对称加密和非对称加密
对称加密 加密和解密用同一套密码
非对称加密 公钥和私钥
公钥 加密
私钥 解密
ssh 生成一对公钥和私钥
redis
安装与配置
# https://blog.csdn.net/weixin_41381863/article/details/88231397
# 默认端口 6379
简单命令
# redis-cli 进入客户端
# select 1 进入 1 数据库 (默认0-15)
# set 变量名 值 ==> 设值
# get 变量名 ==> 取值
# setex 变量名 时间长度 值 ==> 设置值, 值可以存在 设定时间长度 单位秒
# ttl 变量名 ==> 查看setex 剩余的时间长度, 如果没有时间长度 则返回 -2
# get 不存在的变量名 返回 (nil) 类似于 None
# expire 存在时间长度的值 新的时间长度 ===> 设置存在时间长度的值以新的时间长度
# mset 键1 值1 键2 值2 .... ===>同时设置多个值
# mget 键1 键2 .... ==> 同时获取多个值
# keys * ==> 查看现在的所有的键
# keys partern ==> 支持简单的正则
# exists 键 ===> 键 是否存在 存在返回 1 不存在返回0 注意这里返回的是数值型
# del 键 ==> 删除键
# type ==> 查看类型
# hash
hset 域名 键 值 ==> hash域中添加一个键值对, 如果已存在键则修改值
hdel 域名 键 值 ==> hash域中删除一个键值对
hkeys 域名 ==> 查看域中所有键
hvals 域名 ==> 查看域中所有值
hget 域名 键 ==> 获取域中键对应的值
hmget hmset 同上同理
# list
lpush 列表名 值1 值2 ..... ==> 将值存入列表 每一次从左侧插入 即 插入值1 => 插入值2后 => 值2 值1
rpush 列表名 值1 值2 ..... ==> 将值存入列表 每一次从右侧侧插入
linsert 列表名 after/before 存在的值 新插入的值 ==> 在存在的值后面或者前面插入新值
# 如果存在多个一样的值 则找到第一个值就进行 *** 作 然后结束
lset 列表名 下标 值 ==> 修改列表中对应下标的值
lrem 键 count(次数) 值 ==> 将列表中前 count 次出现的值为对应值为 value 的元素移除
count > 0 从头往尾移除
count < 0 从尾往头移除
count = 0 移除所有
lrange 列表名 起始位置 终止位置 ==> 查看列表从起始位置到终止位置的元素
# 查所有 lrange 列表名 0 -1
# set
sadd 集合名 值1 值2 ..... ==> 添加元素 会自动将重复值合并(不一定时合并, 但是会去重)
sermbers 集合名 ==> 查出集合中所有的元素 (乱序)
srem 集合名 值 ==> 删除值
数据类型
1.string类型:
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,也就是byte类型
最大容量是512M。
2.hash类型:
hash用于存储对象,对象的结构为属性、值,值的类型为string.
key:{
域:值[这里的值只能是字符串],
城:值,
域:值,
域:值,
....
}
3.list类型:
列表的元素类型为string.
key:[值1,值2,值3......]
4.set类型:
无序集合,元素为string类型,元素唯一不重复,没有修改 *** 作。
{值1,值4,值3,值5}
5.zset类型:
有序集合,元素为string类型,元素唯一不重复,没有修改 *** 作。
key :{
value : weight
value : weight
}
根据 weight 进行排序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)