Github | 码云Gitee |
---|---|
最主流,使用人数最多 | 一般为国人使用 |
国内访问速度较慢 | 国内访问速度快 |
托管私有项目收费 | 托管私有项目免费(限制开发人数) |
由上得知,码云对于我们来说访问速度更快,具备这一点就足够了
1>创建步骤
在创建之前你需要拥有一个码云账号,如果没有请注册码云账号:点击此处注册
1.1>创建仓库
- 登录码云后,通过网站右上角的「+」号,选择「新建仓库」,进入新建仓库页面
-
填写仓库信息, 输入
仓库名称/介绍
, 并勾选公开
(代表您的项目为开源), 选择语言
和添加 .gitignore
为python, 代表该项目基于的开发语言,开源许可证
可选Apache-2.0
-
点击「创建」,即可在码云上创建你的第一个仓库。
1.2>生成ssh公钥
首先你要学会简单的使用Git,可以参考文档:Git的介绍及常见用法
- 打开Git Bash(安装好git之后开始菜单就会有),然后输入以下命令
ssh-keygen -t rsa -C 'youremail@email.com'
- 1
- 按照提示完成三次回车,即可生成ssh key。通过查看
~/.ssh/id_rsa.pub
文件内容,获取到你的public key, 复制生成后的 ssh key,
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
- 1
- 2
步骤参考图:
1.3>码云上填写公钥
- 将光标放在用户图标上, 然后选择
设置
- 在
安全设置
栏, 点击SSH公钥
- 将生成的公钥粘贴到
公钥
文本框, 并点击确定
- 会有登陆窗弹出并且要求输入码云账户的密码, 登陆
- 如果没问题,你将看到提示窗
你已成功添加SSH公钥
1.4>(可选) 克隆项目到本地
如果本地没有建立项目,可以直接将git上的内容克隆到本地
-
复制ssh链接
-
克隆项目到虚拟机或者物理机都可以。
git clone git@gitee.com:wcflove/tztz.git
- 1
1.5>(可选) 添加项目远程仓库
如果是先在本地建立了项目, 再在码云上创建远程仓库,那么操作如下。
-
首先cd到django项目根目录,然后创建git本地仓库
cd ~/project/tzporject git init
- 1
- 2
-
然后添加远程仓库
git remote add origin git@gitee.com:wcflove/tztz.git
- 1
II. 创建django项目
前提条件
创建虚拟环境之前要确保当前的python默认版本使用的是python3
# 查询系统本系统中安装的python版本
ls -l /usr/bin/python*
- 1
- 2
# 系统中python默认版本为python2.7,可以将其修改为python3
# 第一步:先删除python
rm -rf /usr/bin/python
# 第二步:创建软链接
ln -s /usr/bin/python3 /usr/bin/python
# 第三步:查看python版本是否修改为python3
python -V
- 1
- 2
- 3
- 4
- 5
- 6
- 7
1>创建python虚拟环境
在虚拟机上创建python虚拟环境,因为实际项目部署在linux
mkvirtualenv -p /usr/bin/python3.6 tzproject
- 1
2>创建django项目
2.1>安装django
选择安装django2.1.x最新的一个版本2.1.10
pip install django==2.1.10
- 1
Django 2.1.10
2.2>创建django项目
方式一
cd到你想放django项目路径的地方
cd ~/project/
django-admin startproject <projectname>
- 1
- 2
方式二
在该命令后添加路径, 就可以指定文件夹为django项目的根目录
# '.'点表示当前文件夹, 这个命令一般用在手动指定django的项目路径
django-admin startproject <projectname> .
- 1
- 2
3>创建pycharm项目
通过pycharm远程连接虚拟机中的项目,开发。
3.1>选择项目目录
选择你要存放项目文件的目录,注意django项目和pycharm项目的根目录一定要保持一致,不要用一个pycharm的项目,管理多个django项目。
3.2>配置远程解释器
配置刚才创建的虚拟解释器
3.3>配置远程项目路径
3.4>设置同步配置
3.5>下载代码
4>pycharm配置Django项目
代码下载后,就需要将在pycharm中将项目配置成django项目,以便使用pycharm的各种便捷提示功能。
做好虚拟机端口映射,在浏览器里输入http://127.0.0.1:8000
你应该看到下面的画面
III. django项目设置
1>配置模板文件
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
# 将模板标签内置到模板中 https://docs.djangoproject.com/en/2.1/topics/templates/
'builtins': ['django.templatetags.static'],
},
},
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
2>配置mysql数据库
2.1>登录mysql
mysql -uroot -pqwe123
- 1
2.2>创建数据库
mysql> CREATE DATABASE tzproject CHARSET=utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 1
- 2
utf8md4
是一种基于utf-8
的编码方式,其兼容性优于utf-8
,详情见:mysql中utf8与utf8mb4的区别及转化方法
2.3>创建用户
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
Query OK, 1 row affected (0.00 sec)
- 1
- 2
2.4>授权
mysql> grant all privileges on tzproject.* to 'username'@'%';
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
# 授权创建一起写
grant all privileges on tzproject.* to 'username'@'%' indentified by 'password'
- 1
- 2
- 3
- 4
- 5
- 6
%表示允许所有域名访问
2.5>配置settings
方法一, 直接引入
直接在settings.py文件中添加数据库配置信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'tzproject', # 数据库名
'USER': 'username', # 用户名
'PASSWORD': 'password', # 密码
'HOST': '127.0.0.1', # 主机IP
'PORT': 3306 # 端口
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
方法二, 外部文件引入
将数据库配置信息存到一个文件,在settings文件中将其引入。(推荐)
新建数据库配置文件db.cnf
(名字随意, 但必须为cnf结尾), 参考文档:MySQL配置文件my.cnf的理解
db.cnf文件内容:
[client]
database = tzproject
user = dj_user
password = pythonvip
host = 127.0.0.1
port = 3306
default-character-set = utf8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在settings.py文件中引入db.cnf
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS':{
'read_default_file': 'utils/db/db.cnf'
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
官方文档:Connecting to the database
3>安装mysql数据库的python驱动
⚠️mysql数据库配置完成后,运行django服务会报如下错误,官方推荐安装mysqlclient1.3.7以上版本,也可以安装pymysql,并且需要在settings.py文件所在目录包中的__init__.py
中导入pymysql。
方案一,安装mysqlclient
首先更新ubuntu
sudo apt-get update
- 1
然后安装依赖库
sudo apt-get install default-libmysqlclient-dev
- 1
再切换到虚拟环境中
workon tzproject
- 1
最后安装mysqlclient
pip install mysqlclient -i https://pypi.doubanio.com/simple
- 1
方案二,安装pymysql
安装pymysql可以使用pip install pymysql
, 网不好的可以使用如下代码:
pip install pymysql -i https://pypi.doubanio.com/simple
- 1
然后在settings.py
文件所在目录下的__init__.py
导入
数据库驱动推荐使用第一种方式,mysqlclient
比pymysql
更快更安全,官方推荐。
2.1.7只能用pymysql方法, 不能用mysqlclient, 2.2开始就用不了pymysql了
4>配置redis缓存
用于存放用户session信息,以及需要缓存的各种信息。
# 在虚拟机中安装django-redis
pip install django-redis
- 1
- 2
# settings.py文件中指定redis配置
""" 配置redis数据库
为了给用户的session信息,短信和图片验证码提供一个缓存的空间,我们需要提供一个缓存类数据库用来缓存我们的验证数据
这么做同样也是给mysql数据库减轻负重
这里我们使用redis数据库来完成缓存验证信息的目标
"""
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache", # redis缓存引擎
# 指定redis所在的地址, 默认端口6379, 0代表数据库的索引
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": { # 指定需要使用redis的client类
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
'session': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
},
}
# session存储缓存设置
SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’
SESSION_CACHE_ALIAS = ‘session’
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
文档地址:django-redis 中文文档
django官方文档:Using cached sessions
5>配置日志器
用于记录系统运行过程中的各种日志信息。
在项目根目录中创建一个logs文件夹,用于存放日志文件
# 在setting.py文件中加入如下配置:
# 配置日志器
LOGGING = { # 表示放在logging的参数里面已字典的形式存在
'version': 1, # 版本号固定, 表示django在解读配置信息时里面的键值对参数名有特定的含义,默认自己实现,版本号为1.
'disable_existing_loggers': False, # 表示是不是要禁止已经存在的日志器, 在其他地方也有配置日志器.
'formatters': { # 表示日志输出的格式
'verbose': { # 表示复杂点的格式
'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
}, # levelname日志等级,asctime记录时间,module记录的模块,lineno行号,message具体日志信息
'simple': { # 表示简单格式
# 表示他的等级在模块的第几行出现的信息
'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
},
},
'filters': { # 过滤器, 表示是否屏蔽在其他地方输出的日志信息. django默认不做任何屏蔽
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue', # 过滤器,保留debug及以上的日志
},
},
'handlers': { # 代表处理器
'console': { # 终端,对终端中日志显示的设置
'level': 'DEBUG', # debug级别以上的都可以写
'filters': ['require_debug_true'], # 过滤器,保留debug及以上的日志
'class': 'logging.StreamHandler', # 流处理器
'formatter': 'simple' # 使用简单格式,上面formatters定义的
},
'file': { # 文件,对文件中日志显示的设置
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
# BASE_DIR 指的是里面内嵌的test_pr 目录
'filename': os.path.join(BASE_DIR, "logs/news.log"), # 日志文件的位置
'maxBytes': 300 * 1024 * 1024, # 每个文件的最大值,满了自动产生新文件
'backupCount': 10, # 保留多少个文件
'formatter': 'verbose' # 当保存的文件达到最大时,之后的文件会自动对之前的进行覆盖
},
},
# 本次项目中所使用的日志器在这配置
'loggers': { # 创建logger日志器的对象,是通过配置方式创建,不是真定义
'django': { # 定义了一个名为django的日志器
'handlers': ['console', 'file'], # 可以往终端和文件里面写
'propagate': True, # 表示django日志器执行完后还可以再传递,别的日志器也可以再使用
'level': 'INFO', # info级的日志会被记录
},
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
使用方法
# 使用方法
# import the logging library
import logging
# Get an instance of a logger
# 此处的django为: settings.py文件中LOGGING配置下的loggers中定义的日志器名称
logger = logging.getLogger(‘django’)
def my_view(request, arg1, arg):
...
if ***:
# Log an error message
logger.error(‘Something went wrong!’)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
官方文档:Logging
6>时区配置
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
LANGUAGE_CODE = ‘zh-hans’ # 优先显示的语言
TIME_ZONE = ‘UTC’ # 显示的时区
USE_I18N = True # 是否应该启用Django的翻译系统, 也可以为了提高使用性能,将其关闭
USE_L10N = True # 是否启用本地化
USE_TZ = True # 是否支持时区
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
7>静态文件配置
在项目根目录创建一个static目录,用于存放静态文件(css, js, image, font等)
STATIC_URL = '/static/' # 设置静态文件路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 用于存放静态文件
]
- 1
- 2
- 3
- 4
8>创建应用
a. 本项目主要由4个模块组成,分别为新闻文章模块,课程视频播放模块,文档下载模块,用户管理模块等。在项目根目录下创建一个apps目录用于存放各子应用。
b. 然后cd到apps目录创建各子应用
~$ cd ~/code/tztz/apps/
~/code/tztz/apps$ workon tzproject
(tzproject) ~/code/tztz/apps$ python ../manage.py startapp news
(tzproject) ~/code/tztz/apps$ python ../manage.py startapp course
(tzproject) ~/code/tztz/apps$ python ../manage.py startapp doc
(tzproject) ~/code/tztz/apps$ python ../manage.py startapp user
- 1
- 2
- 3
- 4
- 5
- 6
c. 再到settings文件中,加入如下设置
import sys
# 创建应用之后,把apps目录加入到sys.path中, 目的是让我们可以直接使用app名访问app
sys.path.insert(0, BASE_DIR)
sys.path.insert(1, os.path.join(BASE_DIR, ‘apps’))
- 1
- 2
- 3
- 4
- 5
d. 接着分别在apps文件夹和项目根目录文件夹上右键,加入到Source Root中,优化导入路径(pycharm提示)。
e. 最后将应用添加到INSTALLED_APPS列表中
INSTALLED_APPS = [
# ...
'user', # 将应用加入到INSTALLED_APPS列表中
'news',
'doc',
'course'
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
IIII. 将项目推送到码云
手动同步代码(更保险),然后运行django服务,检查无误后就可以提交代码,然后推送到码云了
1>编写.gitignore文件
为了让git的运行速度更快,有些不需要添加到仓库的文件比如pycharm的项目设置文件.idea文件夹,可以通过.gitignore文件来设置忽略.idea文件夹, 在.gitignore文件的最后加上下面两行
....
# pycharm
.idea/
- 1
- 2
- 3
2>配置好推送人的身份信息
2.1>配置全局身份
$ git config --global user.name "jax"
$ git config --global user.email "jax@qq.com"
- 1
- 2
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。详见: 初次运行 Git 前的配置
2.2>配置项目特定身份
$ git config user.name "jax"
$ git config user.email "jax@qq.com"
- 1
- 2
3>将代码推送至本地仓库
# 工作区添加到暂存区
$ git add .
# 暂存区提交到仓库
$ git commit -m 'project init'
- 1
- 2
- 3
- 4
4>将代码推送到码云
$ git push origin master
- 1
注意,如果出现,推送失败就需要运行强推
$ git push -f origin master
- 1
码云中就出现了,你本次写的代码
到此,django项目的创建与部署就完成了,接下来就是模板抽取和代码编写,见下一篇文章
本项目为作者原创,转载请注明出处https://blog.csdn.net/makesomethings/article/details/98113705
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet">
</div>