一、常用依赖安装
- 安装mysql和redis,并启动服务,安装方法详见"MySQL与Redis的安装"一文
安装python开发包:
- 执行pip3 install python-devel
如果报找不到python-devel,则安装python-dev
其中包括了一些用C/Java/C#等编写的python扩展在编译的时候依赖的头文件等信息。
- 安装mysql-devel和mysql-libs:yum install mysql-devel mysql-libs,注意:在centos中这里安装使用的是系统包管理器yum
- 安装bzip2-devel:yum install bzip2-devel
安装git:yum install git
二、mysql数据库与权限
- 创建项目数据库:create database 名字 charset utf8;
- 创建测试用例数据库:create database test_名字 charset utf8; ,测试用例数据库以test开头
- 创建超级用户:create user "名字"@"%" identified by "密码";
授权:超级用户拥有项目数据库和测试用例数据库的所有全新啊
- grant all on 数据库名.* to "用户名"@"%";
- grant all on test_数据库名.* to "用户名"@"%";
刷新权限:flush privileges;
三、远程连接pycharm
项目部署上线是在linux环境中,正常的开发中很多人使用的是mac或者windows系统,为了能够本机开发代码及时上传到远端服务器中,提高开发效率,需要在pycharm中设置远程连接
- 在pycharm中设置远端服务器并连接。在Tools中找到Development,点击Configration进入配置页面
- 进入配置页面点击+,选择SFTP,设置服务器名字
点击SSH configration进行连接配置,点击+添加配置页面,配置之后测试连接是否成功
host为远程服务器ip,端口为22,Authentication type不用变
- 配置生效之后返回STFP配置页面,设置Root path路径,这里设置的是项目的上一级目录,例如:项目的名字为backstage,上一级目录为testProject,那么这里写/testProject,结尾没有斜杠
- 在Advanced中设置Send keep alive messages each,这里设置为10s
- 设置Mappings页面Development path设置为项目的名字,以斜杠开头,结尾没有斜杠
- 应用后,设置Python Interpreter
- 新建SSH Interpreter,选择已经创建的远程连接
- Interpreter是远程服务器的中的,不是本地机器的,远程服务器使用pipenv --py获取Python Interpreter;Sync folders中左侧是本地项目目录,右侧是远程服务器中的项目目录,两者之间做了映射。
- 新建完成之后选择并应用
- 在项目上点击右键,选择Sync with Deployed to....,然后选择对应的远程服务器进入到新的页面,本地目录和远程目录文件比较,拉取远程文件到本地或者跟新本地修改文件到远程服务器
设置项目的run/debug Configrations
- Python Interpreter:选择设定好的远程连接中的Interpreter
- Working directory:本地的项目路径
- 在log中勾选后两项,项目开发中可以看到日志的详细信息
在Preferences中找到Languages & Frameworks中找到Django进行设置
- 勾选Enable Django Support
- Django project root:选择本地项目的目录路径
- Settings选择到项目config/settings/local.py
- 应用并启动本地服务
启动之后可能会出现的问题
- 找不到celery和environ,使用pipenv导入即可
- 源码中出现类似于raise KeyError, name之类的语法问题,直接修改为raise KeyError(name)即可
四、删改部分文件完成初始模版
在服务器端使用pipenv install -r requirements/local.txt导入所有的依赖
(一)、settings/base.py
设置是否读取.env文件:修改settings/base.py中的default=True,读取该文件,并在项目的根目录下新建.env文件
READ_DOT_ENV_FILE = env.bool("DJANGO_READ_DOT_ENV_FILE", default=True)~~~~
- 修改时区和语言
- DATABASES"default" = True表示的是将HTTP请求中的数据库操作封装成事务
- 安全设置:CSRF_COOKIE_HTTPONLY = Flase,设置为True则只能允许http来获取csrf token,如果设置为False则可以有其他的方式,例如:js
设置Celery:
- CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND'),CELERY_RESULT_BACKEND在.env文件中设置
- CELERY_ACCEPT_CONTENT = ["json", 'msgpack']
- 序列化与反序列化数据格式:CELERY_TASK_SERIALIZER = "json"设置为"msgpack",因为msgpck格式数据比json格式数据更小更快
(二)、settings/local.py(本地开发环境配置文件)
- 主机设置:ALLOWED_HOSTS = ["*"]
- 删除文件中关于邮件的配置,因为这些配置在base.py文件中已经定义了
查看debug配置
(三)、settings/production.py(生产环境配置文件)
删除STORAGES配置,这个是亚马逊的缓存配置,用不到
# STORAGES # ------------------------------------------------------------------------------ # https://django-storages.readthedocs.io/en/latest/#installation INSTALLED_APPS += ["storages"] # noqa F405 # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings AWS_ACCESS_KEY_ID = env("DJANGO_AWS_ACCESS_KEY_ID") # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings AWS_SECRET_ACCESS_KEY = env("DJANGO_AWS_SECRET_ACCESS_KEY") # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings AWS_STORAGE_BUCKET_NAME = env("DJANGO_AWS_STORAGE_BUCKET_NAME") # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings AWS_QUERYSTRING_AUTH = False # DO NOT change these unless you know what you're doing. _AWS_EXPIRY = 60 * 60 * 24 * 7 # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings AWS_S3_OBJECT_PARAMETERS = { "CacheControl": f"max-age={_AWS_EXPIRY}, s-maxage={_AWS_EXPIRY}, must-revalidate" } # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings AWS_S3_REGION_NAME = env("DJANGO_AWS_S3_REGION_NAME", default=None) # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#cloudfront AWS_S3_CUSTOM_DOMAIN = env("DJANGO_AWS_S3_CUSTOM_DOMAIN", default=None) aws_s3_domain = AWS_S3_CUSTOM_DOMAIN or f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
删除邮箱配置
# EMAIL # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email DEFAULT_FROM_EMAIL = env( "DJANGO_DEFAULT_FROM_EMAIL", default="Backstage <noreply@example.com>" ) # https://docs.djangoproject.com/en/dev/ref/settings/#server-email SERVER_EMAIL = env("DJANGO_SERVER_EMAIL", default=DEFAULT_FROM_EMAIL) # https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix EMAIL_SUBJECT_PREFIX = env( "DJANGO_EMAIL_SUBJECT_PREFIX", default="[Backstage]" )
删除媒体和静态文件的配置
# STATIC # ------------------------ STATICFILES_STORAGE = "backstage.utils.storages.StaticRootS3Boto3Storage" COLLECTFAST_STRATEGY = "collectfast.strategies.boto3.Boto3Strategy" STATIC_URL = f"https://{aws_s3_domain}/static/" # MEDIA # ------------------------------------------------------------------------------ DEFAULT_FILE_STORAGE = "backstage.utils.storages.MediaRootS3Boto3Storage" MEDIA_URL = f"https://{aws_s3_domain}/media/"
(四)、.env文件配置
MySQL连接配置:mysql://mysql账户:密码@ip地址/连接的数据库名
因为连接的是远程数据库,数据库在服务器中,所以ip地址写127.0.0.1
DATABASE_URL=mysql://root:1234566@127.0.0.1/Backstage
Redis连接配置:redis:ip地址:端口
REDIS_URL=redis://127.0.0.1:6379
Django的基本配置
- 开启Django调试模式
- 允许用户注册,设置为True
- 自定义一个SECRET_KEY
DJANGO_DEBUG=True DJANGO_ACCOUNT_ALLOW_REGISTRATION=True DJANGO_SECRET_KEY=TgdsdsiYdsk2JKDu3kjHe9kjjkw32jeuejbds83hw7skjhr38dkjh32sdkjb345bshrnbdbwoeska3wusUUeCV
Django生产环境的配置
- DJANGO_ALLOWED_HOSTS
- DJANGO_SECURE_SSL_REDIRECT
- DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS
- DJANGO_SECURE_HSTS_PRELOAD
- DJANGO_SECURE_CONTENT_TYPE_NOSNIFF
- DJANGO_ADMIN_URL
发送邮件的配置
- DJANGO_EMAIL_BACKEND
- DJANGO_EMAIL_HOST
- DJANGO_EMAIL_USE_SSL
- DJANGO_EMAIL_PORT
- DJANGO_EMAIL_HOST_USER
- DJANGO_EMAIL_HOST_PASSWORD
- DJANGO_DEFAULT_FROM_EMAIL
DJANGO_EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend DJANGO_EMAIL_HOST=smtpdm.163.com DJANGO_EMAIL_USE_SSL=True DJANGO_EMAIL_PORT=25 DJANGO_EMAIL_HOST_USER='****@163.com' DJANGO_EMAIL_HOST_PASSWORD='****' # 开启smtp是的授权码 DJANGO_DEFAULT_FROM_EMAIL='这里写标题<****@163.com>'
- 163邮箱开启服务和获取授权码
Celery的配置
- 在base.py文件中找到CELERY_RESULT_BACKEND,设置为CELERY_RESULT_BACKEND=env("CELERY_RESULT_BACKEND"),具体的CELERY_RESULT_BACKEND在.env文件中设置
在.env文件中设置Celery
- CELERY_RESULT_BACKEND:存放缓存结果
- CELERY_BROKER_URL:缓存中间人、代理人
CELERY_BROKER_URL=redis://127.0.0.1:6379/1 # 缓存中间人,设置在redis的1库里 CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/2 # 设置缓存结果存在在redis的2库里
在wsgi.py文件设置,把production改成local
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
五、安装模块报错问题:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
- 原因:macos系统升级没有装xcode command line
解决:
- xcode-select --install安装
- 如果上一步没有解决,则使用sudo xcode-select -switch /
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。