Python 后端开发学习路线

Python 后端开发学习路线

TeaBreak 后端知识库搬运过来的

目标读者是零基础的学生

Week 1 实用工具及技巧

Git和Markdown是必须学习的内容

Tasks

  • 在GitHub上加入TeaBreak Team并创建你的学习笔记仓库
  • 用Markdown完成你的第一篇学习笔记

Week 2 Python语法 & Django入门

Python语法

官方文档:https://docs.python.org/3/

廖雪峰的python教程:https://www.liaoxuefeng.com/wiki/1016959663602400

  • 数据类型
  • 流程控制
    • 条件判断
    • 循环
  • 函数
  • 数据结构
    • 列表
    • 字典
  • 异常处理
  • 模块和包
    • 以下三种import的区别:
      • import json
      • from json import *
      • from json import load
    • 类成员
    • 类方法
  • 装饰器(选学)

Django入门

官方文档:https://docs.djangoproject.com/zh-hans/3.0/

在实践中学习Django会比较快,哪里不会查哪里,首先在官方文档里找,其次用Google搜索。

  1. 推荐大家先跟着官方教程做一个简单的应用:https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial01/
  2. 在我们团队中,Django仅作为后端使用,且在Django基础上使用了DRF (Django REST Framework)这个后端专用框架。DRF的写法与Django原生的写法差别挺大的,但是这两种写法是可以同时存在的,建议大家先熟悉Django原生的写法,再弄懂DRF帮我们节省了哪些部分的代码工作
  3. 推荐大家阅读迎新墙课程二维码的代码来熟悉Django的使用:
    1. models, views, urls 三部分各自的作用及联系
    2. 各个.py文件的作用
    3. settings.pylocal_settings.py 中的配置
    4. Admin后台管理模块:迎新墙
    5. 数据库增删查改 QuerySet
    6. Django 中使用 MySQL 数据库:
      • 在本地安装 MySQL
      • 安装 MySQL Workbench
      • 在 Django 项目的 models.py 中定义数据库表
      • 数据库表结构的设计是一大学问,现阶段只需要保证信息完整即可
      • 可参考迎新墙的数据库设计
        • 主键 primary_key 是每一行数据的唯一标识
        • 外键 foreign_key 连接两个表(现阶段不用考虑,活动日历建一个表即可)
        • Django ORM 常用字段类型
          • AutoField 自增主键
          • CharField 定长字符串
          • DateTimeField 日期时间
          • PositiveIntegerField 非负整数
          • TextField 长字符串
      • 在 Django 项目的 settings.py 中定义数据库连接:
      •   DATABASES = {
              'default': {
                  'ENGINE': 'django.db.backends.mysql',
                  'OPTIONS': {
                      "host": "127.0.0.1",                    # 本地的MySQL
                      "port": 3306,
                      "database": "database_name",            # 改成你的数据库名字
                      "user": "your_database_username",       # 用户名
                      "password": "your_database_password",   # 密码
                  },
              }
          }
        
      • python manage.py make migrations xxx(项目名字) 创建数据库迁移文件
      • python manage.py migrate 数据库迁移
      • 数据库增删查改的操作,请参考QuerySet API问答墙的API
  4. 推荐大家阅读柠檬茶日历用户系统的后端代码来熟悉DRF的使用:
    1. 阅读后端README
    2. http返回状态码及信息:
      1. Response(msg="not found",status=status.HTTP_404_NOT_FOUND) 显式定义状态码
    3. 装饰器
      1. 原理:https://segmentfault.com/a/1190000004461404
      2. 应用:
        1. @api_view(["POST"]) 指定某个接口的http方法
        2. @permission_classes([]) DRF中的权限管理
        3. @authentication_classes([CustomUserTokenAuth]) DRF中的用户认证
    4. 欢迎大家来完善原有的后端代码:在企业微信里提出建议 -> 新建分支 -> 在新分支上变更 -> Pull Request 或 直接合并到master

Tasks

Week 3 如何在服务器上部署代码

详见后端开发流程:https://github.com/TeaBreak-Tech/Backend-Learning/blob/master/%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.md

  • SSH
  • 常用命令
    • ls -al or ll alias
    • pwd
    • cd
    • screen
      • screen -ls
      • screen -x <name>
      • <Ctrl-a> <Ctrl-d>
    • top or htop
    • mv
    • cp
  • 怎么将代码部署到服务器上
    • Git同步或scp同步
    • Nginx反向代理
    • runserver

Week 4 Django REST framework (DRF)

柠檬茶日历为例

Week 5 User System Design

Week 7 Nginx

  • nginx.conf语法
  • e.g calendar nginx.conf
  •     server {
            listen 443 ssl;
            server_name calendar.dev.tea-break.cn;
            ssl_certificate /home/www/calendar/SSL/dev/Nginx/1_calendar.dev.tea-break.cn_bundle.crt;
            ssl_certificate_key /home/www/calendar/SSL/dev/Nginx/2_calendar.dev.tea-break.cn.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers on;
    
            location /django/static/ {
                alias /home/www/calendar/django/static/;
            }
            location / {
                root /home/www/calendar/react/build;
                index  index.html index.htm;
                try_files $uri /index.html
                autoindex on;
            }
            location /api {
                proxy_pass  http://127.0.0.1:8004;
            }
            location /uauth {
                proxy_pass  http://127.0.0.1:9000;
            }
            location /api/get_cos_credential {
                proxy_pass  https://www.tea-break.cn;
            }
            location /T67xT93qKR.txt {
                root /;
                expires -1;
                add_header Cache-Control no-store;
            }
        }
    
        server {
            listen       80;
            server_name  calendar.dev.tea-break.cn;
            return 301 https://$host$request_uri;
        }
    
    
        server {
            listen 443 ssl;
            server_name app.calendar.dev.tea-break.cn;
            ssl_certificate /home/www/calendar/SSL/app/Nginx/1_app.calendar.dev.tea-break.cn_bundle.crt;
            ssl_certificate_key /home/www/calendar/SSL/app/Nginx/2_app.calendar.dev.tea-break.cn.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers on;
    
            location / {
                root /home/www/calendar/app/build;
                index  index.html index.htm;
                try_files $uri /index.html
                autoindex on;
            }
            location /api {
                proxy_pass  http://127.0.0.1:8004;
            }
            location /uauth {
                proxy_pass  http://127.0.0.1:9000;
            }
            location /api/get_cos_credential {
                proxy_pass  https://www.tea-break.cn;
            }
            location /T67xT93qKR.txt {
                root /;
                expires -1;
                add_header Cache-Control no-store;
            }
        }
    
        server {
            listen       80;
            server_name  app.calendar.dev.tea-break.cn;
            return 301 https://$host$request_uri;
        }