Mark's blog

Content



该系列文章源码来自: 博主第一次手撸博客(Django)
温馨提示: 该系列教程不提供前端布局和美化方面的内容, 博主本行是后端, 在我的项目中前端部分采用的框架是 Materialize, 是谷歌 Material Design 设计风格的前端框架, 欲知详情请点击上方提供的仓库地址, 源码采用WTFPL许可证开源


开发环境

  • 操作系统: Manjaro Linux 18
  • Python版本: Python3

    提示: Manjaro把Python3作为默认的Python版本, 其他发行版可能默认版本是Python2, 如果默认为Python2, 以下出现的Python和pip命令请使用python3和pip3

  • Django版本: v2.1.5
  • 主力IDE: PyCharm (使用教育邮箱激活)
  • 辅助Editor: Visual Studio Code

pip 换源

  • 我们选用清华源, 因为包含pacman-mirrors (Arch系用户眼神暗示)
  • 官方换源文档: 清华源pipy镜像使用帮助
  • 已经入门的Linux用户对各种换国内源应该已经轻车熟路了, 我向新手推荐几个常用的国内的开源镜像站: 中科大源, 清华源, 我个人常用的就这两个, 主要用中科大源. 有人刚点进去可能就要问了, 我该怎么使用呢? 很简单, 页面的右侧一般有 下载系统镜像配置软件源 的按钮, 清华源则可以查看 相关链接 中的 使用帮助, 很多网站都有类似的帮助页面, 比如说非常著名的 Arch Wiki, 是Arch新手入门的官方指南. 授人以鱼不如授人以渔, 我就不直接放出帮助页面的链接了, 希望大家能用 脑中的常识和智慧 解决问题, 而不是用 解决问题.

安装 Python-Django 库

  • 终端执行: pip install Django==2.1.5 --user

    ==版本号 可以安装指定的版本, 避免一些不必要的兼容问题.
    加上 --user 的意思是以普通用户的身份进行安装, 否则会显示权限不足(因为Python的文件夹权限所致), 或者前面加个 sudo 也能顺利安装.


创建项目

  • 打开PyCharm, 点击菜单栏左边第一个 File -> New Project -> Django
  • 看到Django项目的面板, 项目位置不用多说, 下面的第一个 Project Interpreter 选项是选择当前项目的Python环境, 第一个 New environmnet using 是使用虚拟环境的, 我在刚开始看Django入门文档的时候嫌麻烦就没去详细了解 ( 是科技第一生产力), 也没去使用, 我一直用的是下面的 Existing interpreter, 即实际的现有环境.
  • 下面的 More Settings 点开, Template Language 选默认的 Django, Templates folder 即放置HTML模板的地方, 默认的 templates 即可, 接下来的 Application name, 如果后面懒得在终端里敲命令去创建一个 App应用的话, 在这里写了会自动创建的, 最后的 Enable Django admin, 保持默认的 打钩 状态, 因为在后面的开发中要多次使用这个Django框架自带的admin后台管理模块
  • 点击 create 就可以开始了

settings.py && urls.py 里面的初始设置

  • settings.py先滑到最下面, 看到有一个 static, 即静态文件夹的设置, 编辑成如下所示:
1
2
3
4
5
6
7
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]

那么在上方的注释中, 第一行是说明, 这个默认创建的静态文件夹可以放css, js && 图像文件, 但是出于强迫症晚期和方便文件整理的考虑, 我们在下面创建一个 /media/ 文件夹, 专门存放图片, 这个文件夹只放css, js或者是其他的前端库文件夹. 第二行注释是设置静态文件夹的官方文档, 如果说你在setting.py里面想自定义一些东西是不知道怎么改, 先找你要改动的地方有没有这样的注释, 如果有, 按住 Ctrl键 鼠标左击链接就可以直接用默认浏览器打开这个链接了, 如果没有, 自觉使用Google && Bing必应, 为什么不说百度? 厌了

注: 上述的 ctrl+点击 来打开链接的方式普遍见于许多环境中, 比如 Linux终端, 众多的IDE和Editor. 简单一句话, 常规操作 (授人以鱼不如授人以渔 x2)

  • 创建一个跟 /static/ 文件夹同级(绝对路径和相对路径的概念应该understand吧)的 /media/ 文件夹, 在静态文件夹设置项目的后面追加以下代码:
1
2
3
4
5
# Media files
# https://blog.csdn.net/xxx_gt/article/details/79719790

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = '/media/' # 跟STATIC_URL类似,指定用户可以通过这个路径找到文件

注: 关于为什么这么写, 在前面的讲解中应该已经明白了, 点开注释中的链接就知道了.

  • 接下来在 urls.py 中添加如下代码:
1
2
3
4
from django.conf.urls.static import static

# 配置静态页面
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

注: 这个from开头的引入语句应该放在哪里, 我相信有点Python基础的人应该都知道. 如果不在 urls.py 里面声明 /media/ 为静态路径的话, 图片将无法显示(即没有相应的静态资源url)

  • 最后来设置数据库, 我由于学习需要, 不采用默认的 SQLite, 也不用在上个项目中使用的老牌数据库 PostgreSQL, 而是选用 MySQL, 找到配置数据库的位置, 把原来用于 SQLite 的配置代码注释掉 (不要轻易删掉以后可能会用到的代码!), 写入新的, 如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库驱动
'NAME': 'blog', # 指定的数据库名
'USER': 'root', # 数据库登录的用户名
'PASSWORD': '8974', # 登录数据库的密码
'HOST': '127.0.0.1',
'PORT': '3306', # 数据库服务器端口,mysql默认为3306
}
}

注: 想知道为什么这么写吗? 详见注释中的链接 (重要的事情说三遍)


安装 MySQL && 创建 Database

友情提示: 从8.0.14开始, MySQL在Manjaro上缺少运行依赖, 现在很有可能安装后无法正常运行, 推荐使用Arch官方现在一直在维护的MariaDB, 相关文档: Arch Wiki - MariaDB

  • Arch 的官方文档中 (Arch && Manjaro 一家亲), MariaDBArch 官方定义的 MySQL 的默认实现, Arch 官方已经不再支持 MySQL , 转而支持 MariaDB (关于MySQL和MariaDB的故事, 有兴趣的可以在Google或者Bing必应上搜一下, 百度我已经很少用了), 但是我偏偏就是要装 MySQL, 不慌, 在 Arch cn 源中有现成的包, 关于添加 Arch cn源: 中科大Arch Linux CN源使用帮助

  • 参考文档

  • 以下是安装步骤(全程终端):

    • sudo pacman -S mysql

    • 安装完成后在终端中会显示以下提示:

      1
      2
      3
      4
      5
      6
      7
      正在安装 mysql-clients (8.0.11-1)...
      正在安装 mysql (8.0.11-1)...
      :: You need to initialize the MySQL data directory prior to starting
      the service. This can be done with mysqld --initialize command, e.g.:
      mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql
      :: Additionally you should secure your MySQL installation using
      mysql_secure_installation command after starting the mysqld service

      那么需要执行上述的两条命令来初始化MySQL

    • 初始化MySql数据目录/注意记录root临时密码(以下操作如果无法显示初始化失败, 请在命令的最前面加上 sudo): mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql, 注意记录root用户的临时密码

    • 查看MySql状态: sudo systemctl status mysqld, 这时候不出意外是没有开启的

      小贴士: 善用 Tab键 自动补全

    • 启动MySql服务/开机自启: sudo systemctl start mysqld, sudo systemctl enable mysqld

    • 此时可以再次查看一下 mysqld.service 是否启动

      注: .service 后缀可以省略, Tab键 自动补全时会带上 .service 后缀

    • 账户安全设置/需要使用root临时密码登陆(执行不成功请加上 sudo 提权): mysql_secure_installation

    • 后面的操作, 能看懂基本的单词和语句应该几下子就搞完了

  • 接下来创建一个新的Database:

    • 进入MySQL: mysql -u root -p

    • 输入root用户密码: Enter password:****** # 登录后进入终端

    • 创建Database: CREATE DATABASE 数据库名; (注意结尾一定要打分号!)

    • 查看Database: show databases;, maybe是这样的:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      mysql> show databases;
      +--------------------+
      | Database |
      +--------------------+
      | blog |
      | information_schema |
      | mysql |
      | performance_schema |
      | sys |
      +--------------------+
      5 rows in set (0.01 sec)
    • 创建完成, 检查一下在 setting.py 中的设置数据库的各个参数是否一致


安装 python-mysqlclient 库

  • Django框架由于是Python库, 需要一个 桥梁 去连接 Django && MySQL
  • 安装: pip install mysqlclient --user, 加上 --user 的意思是以普通用户的身份进行安装, 否则会显示权限不足(因为Python的文件夹权限所致), 或者前面加个 sudo 也能顺利安装

    小贴士: 在这里不建议使用图形化的 pamac 或者 在终端使用 pacman 包管理器去安装, 博主在这里踩了坑, 如果这么安装的话, 那么在执行下面的 python manage.py migrate 时, Django框架会一直报错说你没装, Linux日常玄学问题233


模型迁移

  • 打开 PyCharm的终端 或者 Linux终端, 在这个项目文件夹内, 执行 python manage.py makemigrations, 如果提示 Do you install XXXX, 即问你是否安装了叫XXXX的Python库时, 用上一步的方法安装即可. 执行成功了应该是刷出了一堆东西然后告诉你OK了

    小贴士: makemigrations 太长? 善用 Tab键 自动补全

  • 执行 python manage.py migrate, 完成迁移


创建超级用户

  • 由于在后面需要多次使用admin后台管理模块, 所以需要一个权限最大的超级用户方便操作和开发 (老话说得好: root一时爽, 一直root一直爽)
  • 执行 python manage.py createsuperuser

    小贴士: createsuperuser 太长了? 善用 Tab键 自动补全

  • 输入用户名和密码应该是小意思了, 建议不要太长, 后面测试登录页面以及需要登录后才能使用的页面时, 你会知道是什么感觉的(#手动滑稽)

可以开始搞事情了!

 评论