python| 初探 django

date: 2018-8-29 21:45:59
title: python| 初探 django
description: 初探 django

遇到使用 django 的项目, 用自己的方式熟悉起来

更新: 一直局限于 pycharm 要本地有 python 环境, 才可以智能识别代码, 现在才发现可以使用 project interpreter 进行设置, local/ssh/docker 都可以, 又可以折腾起来了~

教程

开发环境配置

不多说, 直接上 dockerfile:

# FROM ubuntu:18.04
FROM rastasheep/ubuntu-sshd:18.04
LABEL maintainer="1252409767@qq.com"

RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
    apt update
RUN apt-get update && apt-get install -y locales && \
    # rm -rf /var/lib/apt/lists/* && \
    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8

RUN apt install -y fish vim less curl telnet net-tools ipython3 python3-pip
RUN echo -e "[global]\nindex-url=https://mirrors.aliyun.com/pypi/simple/\nformat=columns" > /etc/pip.conf && \
    pip3 install --upgrade pip && \
    pip3 install django

WORKDIR /var/www/

还有 docker-compose:

version: '3'
services:
    u:
        build:
            context: linux
            dockerfile: ubuntu.Dockerfile # https://hub.docker.com/_/ubuntu/
        volumes:
            - ../:/var/www
        ports: # https://github.com/rastasheep/ubuntu-sshd
            - "8038:80"
            - "1138:22"
        tty: true

简单说明几个有意思的点:

  • 为啥使用 docker? 不提那些大道理, 可以足够 任性 -- 想建就建, 想删就删
  • 为啥使用 Ubuntu? 教程中使用的 Ubuntu, 避免可能 冒出的问题, 保持 OS 一致可以有效降低风险
  • 为啥都使用的最新版? 无论是 Ubuntu 还是 python, 都选择了最新版本, 享受技术迭代带来的乐趣
  • 为啥不是官方的 Ubuntu 镜像? 因为我希望使用 ssh, 还是喜欢 xshell 下的 terminal. 另外想增加 ssh 非常简单, 先谢开源 rastasheep/ubuntu-sshd

还有一些细节 -- Ubuntu使用国内源 pip使用国内源 pip设置 等, 都是一点一点积累的.

正是这些积累, 尝试新事物 django 的时候, 不会有一个陡峭的学习曲线, 可以快速 get 一个新技能.

django: 运行第一个应用

安装好 django 后命令行就可以 django-admin, 可以通过模板来创建项目

# 通过模板来创建项目
django-admin startproject startproject

# 查看
root@9e16d0821126 /v/w/c/p/d/startproject# tree
.
├── db.sqlite3
├── manage.py
└── startproject
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-36.pyc
    │   ├── settings.cpython-36.pyc
    │   ├── urls.cpython-36.pyc
    │   └── wsgi.cpython-36.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

2 directories, 10 files

# 启动进行测试
cd startproject
python3 manage.py runserver

启动后, 看到如下输入:

Run 'python manage.py migrate' to apply them.

August 29, 2018 - 14:13:27
Django version 2.1, using settings 'startproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

为啥把这段贴出来呢? 是要传递一个很简单的观点:

英文很简单也很重要, 经常给我们很多有用信息

  • 看了这段话才知道要运行 python manage.py migrate
  • 服务器运行在 127.0.0.1:8000

我们来测试一下:

telnet 127.0.0.1 8000 # 测试端口是否通
netstat -alnp|grep 8000 # 查看网络服务的信息
curl 127.0.0.1:8000 # 测试 http, 也可以用 wget

django: 深入一点示例项目

上一节已经使用 tree 来查看 项目目录结构, 这节我们来深入几个地方

  • python3 manage.py: 项目管理入口, 是不是和 php yii 或者 php artisan 类似? 是的, 很多地方, 语言是想通的, 框架设计也是
  • settings.py: 应用配置文件, 基本通过 变量名 + 注释 就可以理解
  • urls.py: 相当于其他框架中的 路由
  • wsgi.py: Web Server Gateway Interface, web服务的通用抽象, 类比一下 php 中的 fcgi
# 项目管理入口
python3 manage.py

# 换ip:port, 这样可以在容器外访问
python3 manage.py runserver 0.0.0.0:80

# 调试, 可以配合之前的 ipython 使用
python3 manage.py shell

django: project & app

简单看完 django 的 project 概念后, 我们来看到 project 下的一个新概念 -- app

# 新建一个名叫 blog 的 app
python3 manage.py startapp blog

# 目录结构
root@9e16d0821126 /v/w/c/p/d/startproject# tree blog/
blog/
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-36.pyc
│   ├── admin.cpython-36.pyc
│   ├── models.cpython-36.pyc
│   └── views.cpython-36.pyc
├── admin.py
├── apps.py
├── migrations
│   ├── __init__.py
│   └── __pycache__
│       └── __init__.cpython-36.pyc
├── models.py
├── tests.py
└── views.py

3 directories, 12 files

着重来看几个:

  • views.py: 视图文件, 熟悉 MVC 的应该都懂, 当然, 有视图也少不了 template(模板)
  • models.py: MVC 中的 model, 我们要开始和数据库打交道了
  • migration: 数据迁移, yii/laravel 这样的框架也都有
  • admin.py: 相关管理配置
  • test.py: 测试对代码质量有多重要, 就不多说了

还有一些常见的:

  • project 中的 admin 模块, 进行一些常规的管理操作
  • project 中的 urls 支持使用 include 加载 app 中的 urls
  • project 中一些常用的配置: i18n l10n
  • app 中 views 使用 render 来加载 template
# model + migration
python manage.py makemigrations blog # 通过 model 生成 migration 文件
python manage.py sqlmigrate blog 0001 # 查看 migration 对应的 sql 语句
python manage.py migrate blog # 执行 migrate

# admin模块
python manage.py createsuperuser

写在最后

为什么我们要使用框架呢? 因为框架了封装了很多 通用的功能, 有些是我们知道的, 有些是 我们不知道的, 了解框架, 既是学习技术上的 架构设计, 也是补充相应技术的 领域知识, 比如上面没有提到的 安全, 框架往往比我们做得更多.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352