# knowledge **Repository Path**: JackStarCoder/knowledge ## Basic Information - **Project Name**: knowledge - **Description**: 集成Markdown和luckysheet的知识库 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-26 - **Last Updated**: 2022-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: Vue, vuetif ## README # django项目相关笔记 ## 项目部署 - 前端:192.167.70.101:5011 数据库:10.20.26.98/root/123456 - 前端:10.20.19.161:5011 / 8001 数据库:10.20.158.149/root/123456 ### 版本和环境依赖信息: - python3.6 (3.6以上) - django3.2.9 (3.0以上) - channel3.0.4 (3.0以上) - java环境 - mysql数据库 - redis数据库 ### 部署运行步骤: - 下拉项目 - 打开项目,配置python解释器环境 - 安装python依赖包 pip install -r requestments.txt - 配置setting.py的信息:(只看关注参数,其他勿动) - DEBUG:True/False 调试时可用True,上线设置为False - ALLOWED_HOSTS:运行主机的ip - redis连接信息: - redis_ip = "10.20.158.150" // redis服务器所在的ip - redis_pw = "123456" // redis连接的密码 - mysql连接信息: - 配置连接信息 ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', "NAME": "hsdj", # 需要自己手动创建数据库 "USER": "root", "PASSWORD": "root", "HOST": "127.0.0.1", "PORT": 3306, 'TEST': { 'NAME': 'markdown_mdspace', # 用于单元测试的数据库 }, } } ``` ### 数据库配置信息 - mysql需要安装依赖包,python3 -m pip install PyMySQL,并在_init_.py引用 ``` import pymysql pymysql.install_as_MySQLdb() ``` - 创建数据库(利用mysql手动创建) ``` mysql> CREATE DATABASE IF NOT EXISTS hsdj -> DEFAULT CHARACTER SET utf8 -> DEFAULT COLLATE utf8_chinese_ci; ``` - 创建表:利用django脚手架建表 ``` python manage.py makemigrations 子应用 #生成migrations临时文件 python manage.py createsuperuser # 创建超级用户,首次执行即可 python manage.py migrate 子应用 #根据生成的migrations直接生成数据库表结构 ``` - 后续每次如果更改了表结构,按顺序执行这两条命令即可 - Tip:python manage.py migrate 执行如报错,建议清空所用url以及view再执行。 - 新环境,因项目引用,导致命令执行会因数据缺少而保存; - 临时解决方法:在。/Models目录下已创建于本项目结构一致的app应用以及项目配置,可切换至此目录下执行。 - 导入项目必要的数据: - 将data/mysql/目录下的数据导入mysql,这些是系统运行的参数 - 其他的可以根据业务需求通过后台管理增加,或系统自己进行增删改查 ### 运行项目: - manage.py运行:这只适合于开发过程调试使用 ``` python manage.py runserver 127.0.0.1:8001 ``` - run.py运行:启动了uvicorn的异步服务器运行,参数配置如下 ``` "djangoProject.asgi:application", host="0.0.0.0", port=8001, # 可指定 log_level="debug", reload=True, ``` - 使用nginx进行代理:[Nginx代理](#neginx部署) ## django通信框架简介: - ASGI(异步网关): ![img_1.png](data/image/img_1.png) - 项目架构简介: ![img.png](data/image/img.png) ## 创建django项目 ### 参考帖子 - [参考帖子](https://blog.csdn.net/ithongchou/article/details/82939416) - [参考贴子 Python之Django框架的使用](https://blog.csdn.net/ithongchou/article/details/82939416) - [Django框架介绍及配置](https://blog.csdn.net/weixin_43751803/article/details/87906148) - [Vincen_shen的笔记 django+celery的开发](https://www.cnblogs.com/vincenshen/p/12266158.html) ![img.png](data/image/img-django.png) - [django settings配置的官方文档](https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field) ### 创建项目和应用 - 创建项目 ``` django-admin startproject 项目名称 ``` - 创建应用 ``` python manage.py startapp 应用名称 ``` - 运行项目 ``` python manage.py runserver ip:port ``` ### 创建管理员 - mysql需要安装依赖包,python3 -m pip install PyMySQL - 对应的库名称:hsdj ``` python manage.py migrate python manage.py createsuperuser ``` - 本机的mysql对应的超级用户/密码:admin/ljk123456 - 10.20.158.149的mysql对应的超级用户/密码:admin/admin123456 ## django中的app应用 - [django中的app应用 参考帖子](https://blog.csdn.net/weixin_44675366/article/details/89527608) - 在 settings.py 文件 INSTALLD_APPS 列表中注册app ![img.png](job/static/img_md/settingAddApp.png) - 框架自带的一些APP应用 - 编写视图函数 - [django和flask的模板的区别](https://blog.csdn.net/weixin_34357928/article/details/93009384?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link) - 变量定义 - 后台传参 - 静态文件 - [django模板的if/for以及过滤器的书写](https://blog.csdn.net/weixin_33733810/article/details/94073393) - [北京=深渊:学习笔记](https://www.cnblogs.com/superhin/p/12159853.html) ## django中的模型-models ### 参考贴 - [字段类型](https://blog.csdn.net/weixin_44485501/article/details/119279768) - [django ORM总结](https://sixiangdefairy.blog.csdn.net/article/details/84934078?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link) - [创建模型的具体示例,较清晰](https://www.cnblogs.com/erchun/p/14289049.html) - [Django中model字段类型及field参数](https://blog.csdn.net/zh18380113164/article/details/105232557/?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-8.no_search_link&spm=1001.2101.3001.4242.5) - [外键关系图解 详细](https://blog.csdn.net/weixin_34140828/article/details/112111162) - [admin后台管理页面配置](https://blog.csdn.net/Jairoguo/article/details/104242947?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.nonecase) - [jsonpath](https://www.cnblogs.com/syhshare/p/10684846.html) ### 生成表: - python manage.py makemigrations 子应用 #生成migrations临时文件 - python manage.py migrate 子应用 #根据生成的migrations直接生成数据库表结构 - 后续每次如果更改了表结构,按顺序执行这两条命令即可 ### 查询: - values方法可以获取number字段的字典列表。 - values_list可以获取number的元组列表。 - values_list方法加个参数flat=True可以获取number的值列表。 - 5种查询方法: ``` v1 = models.Host.objects.all() # QuerySet[obj(id,hostname),obj,...],内部元素都是对象 v2 = models.Host.objects.all().values('hostname','ip','port','b_id','b__caption') #b连接的外键 在元组和字典格式里跨表查询时要用"__" # QuerySet[{'hostname':c1,'ip':1.1.1.1,'port':80,'b_id':2,'b__caption':abc},{},...],内部元素都是字典 v3 = models.Host.objects.all().values_list('hostname', 'ip', 'port', 'b__caption') # QuerySet[(c1,1.1.1.1,80,2,abc),(),...],内部元素都是元组 models.Business.objects.get(id=1) # 获取到的一个对象,如果不存在就报错 获取到一个对象或者None : models.Business.objects.filter(id=1).first() #***建议用这种 return render(request,'host.html',{'v1':v1,'v2':v2,'v3':v3,'b_list':b_list}) ``` - filter的使用: ``` 方法名 解释 filter() 过滤查询对象。 exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重 values() 返回包含对象具体值的字典的QuerySet values_list() 与values()类似,只是返回的是元组而不是字典。 dates() 根据日期获取查询集 datetimes() 根据时间获取查询集 none() 创建空的查询集 all() 获取所有的对象 union() 并集 intersection() 交集 difference() 差集 select_related() 附带查询关联对象 prefetch_related() 预先查询 extra() 附加SQL查询 defer() 不加载指定字段 only() 只加载指定的字段 using() 选择数据库 select_for_update() 锁住选择的对象,直到事务结束。 raw() 接收一个原始的SQL查询 ``` ## Mysql数据库操作 ### 配置mysql - [安装MySQL](https://blog.csdn.net/weixin_42869365/article/details/83472466) - 启动: `mysql -u root -p` - 修改密码: `alter user'root'@'localhost' identified by '新密码';` - 数据库管理员:root/root@localhost ### 新建用户和表空间 - 创建表空间名 `create database hsdj default character set utf8 collate utf8_bin;` - 创建用户 `create user ljk identified with mysql_native_password by 'ljk';` - 给用户赋权(上面设置了用户密码,则赋权时不需要再设置密码) ``` grant all on 空间名.* to '用户名'@'%' identified with mysql_native_password by '密码'; grant select,insert,update,delete,create,drop on vtdc.employee to 用户名 identified with mysql_native_password by '密码'; ``` ### 操作数据库 - [数据库字段的增删改](https://blog.csdn.net/zhaofuqiangmycomm/article/details/89228383) - [导出/导入表结构和数据](https://www.cnblogs.com/bigtreei/p/9074308.html) - 导出语法 ``` mysqldump -u用户名 -p密码 数据库(已有的) > 导出路径 (导出表:mysqldump -u用户名 -p密码 数据库名 表名 > 导出路径  #表结构和数据) (mysqldump -u用户名 -p 密码 -d数据库名 表名> 导出的文件名  #只有表结构) ``` ## django高级开发: ### 参考贴 - [celery和redis实现异步请求](https://blog.csdn.net/ybw_2569/article/details/98349930) ### django-channel:双工道通信 - [django3 channel](https://cloud.tencent.com/developer/article/1719489) - django3以上不支持websocket,用channel实现 ### django-redis缓存 - [redis缓存](https://www.cnblogs.com/believepd/p/10275384.html) - [redis安装使用的菜鸟教程](https://www.runoob.com/redis/redis-install.html) - [redis安装、配置和启动](https://blog.csdn.net/qrainly/article/details/82757902) - redis安装包路径:./data/zip/ - redis安装路径: - pc:D:\Programe Files\Redis-x64-5.0.14 - redis运行: `redis-server.exe redis.windows.conf` - redis操作: - 打开新的命令行操作窗口: `redis-cli.exe -h 127.0.0.1 -p 6379` ## django的单元测试 - 数据库配置,setting中配置以下数据会自动创建数据库: ``` 'TEST': { 'NAME': 'test_student_sys', # 自定义的测试数据库 库名 } ``` - 数据库测试: - 启动:`python manage.py shell` - 导入models eg: `from job.models import Files` - 写方法查询 eg: `fils = Files.objects.all()` ## django部署 ### 环境打包和资源收集 - 升级:easy_install --upgrade pip - 升级:pip install -r requirements.txt - 打包:pip freeze > requirements.txt - 收集文件: ``` 收集静态文件时,必须将MEDIA_ROOT,STATICFILES_DIRS先注释, 然后terminal中输入:python manage.py collectstatic ``` - [配置Nginx-静态资源文件](https://www.cnblogs.com/JeromeLong/p/13191733.html) ### neginx部署 - 代理配置conf: ``` server { listen 8005; # server_name localhost; location / { proxy_pass http://192.168.189.72:8001/; } location /markdown/ws { proxy_http_version 1.1; # 最重要的就是下面两行,这两行将请求服务器升级协议为WebSocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # 连接成功后,后端服务器响应时间,如不配置proxy_read_timeout,默认是60s proxy_read_timeout 100s; proxy_pass http://192.168.189.72:8001/markdown/ws; } } ``` - 启动: `start nginx` - 停止: ``` nginx.exe -s stop nginx.exe -s quit ``` - 重载: `nginx.exe -s reload` - 日志: `nginx.exe -s reopen` ### SVN操作 - 删除跟踪 - 指令: svn delete PATH... - 例:svn delete --keep-local .git ``` 执行后,需要提交一次,这样服务器里就会删除这个文件, 删除的时候带上参数 --keep-local 就会把该文件保留再本地, 然后你还需要把这个文件添加到忽略清单,这样下次提交的时候,就不会再包含这个文件夹。 ``` - 添加忽略 ## pycharm - [pycharm:好用的插件](https://www.cnblogs.com/wyl-0120/p/14804555.html)