Django 快速入门教程

版权声明:本文为博主原创文章,转载请注明出处。

前言

学习web开发是一条艰辛的道路,那些令人讨厌的前端页面总是需要我们复制粘贴、复制粘贴,一旦修改,经常要同时修改多个文件。

页面做的最多的地方无疑是后台管理部分,一个模块,基本就要做出一套页面,比如:

  1. 增加内容页面
  2. 编辑内容页面(和增加内容的页面大部分内容相同)
  3. 内容列表页面(里面还要考虑筛选、搜索功能的实现)

做这些页面做多了,难免心生厌烦,比如我用什么thinkphp,一直要复制n套模版,编辑html,替换一些名称什么的,完全就是苦力活。

所以,为了减少这些重复的劳动,Django替我们实现了一个管理后台,能够对我们设计的模型自动生成管理页,且不需要编写html,这听起来很美好,然而这就是事实。

人生苦短,我用Python(Django)!

操作环境

  • 系统:*nix(Ubuntu、OS X,Windows No! No! No!)

  • 软件:python3、django、pycharm

安装环境

安装Django前需要安装python3,我们使用包管理软件安装:

(Windows用户请到python官网下载execute installer,这就是不推荐Windows的原因)

1
2
3
4
5
6
7
# Ubuntu,好像自带python3,没有的话就执行这个吧
sudo apt install python3

# OS X,使用brew安装,没有brew请执行以下命令
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装python3
brew install python3

当python3安装完成后,在bash中就可以使用pip3进行python3的包管理了。

(Windows需要配置环境变量,execute installer可以在安装时选add to path。)

1
2
# 安装django
pip3 install django

至此Django就安装完成了。

新建项目

打开终端,在work space(工作空间)下,执行以下命令:

1
2
# mysite为新建的站点的名称,可自定义。
django-admin startproject mysite

创建完成后,项目结构如下所示。

1
2
3
4
5
6
7
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
  • 最外层的mysite是无关紧要的,随时可以重命名,不影响运行。

  • manage.py,项目的管理器,作用跟django-admin一致。

  • mysite/settings.py,项目的配置文件,调试、语言、时区等设置在此配置。

  • mysite/urls.py,定义了url与各模块之间的关联。

  • mysite/wsgi.py,用于部署到apache等web服务器上,由于纯Python环境亦可运行,小项目并不需要理会这个。

新建模块

打开终端,cd到项目目录下,执行以下命令:

1
2
# user是我们将要新建的模块(应用)名称
python3 manage.py startapp user

执行命令后生成的文件如下所示:

1
2
3
4
5
6
7
8
9
user/
migrations/
__init__.py
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
  • migrations,这个目录用于存储自动生成的模型脚本。

  • __init__.py,这两个文件为空,在Python里,目录下包含__init__.py就是把目录定义为包。

  • admin.py,用于将你定义的模型注册到管理平台。

  • apps.py,疑似用于作为配置文件。

  • models.py,用于定义你的模型。

  • test.py,用于编写测试代码。

  • views.py,用于定义视图。

设计模型

我们现在完成了用户模块(应用)的创建,但这个模块还是空的,我们现在来设计个账号模型。

账号的基本要素,登录名,密码。

以下为user/models.py:

1
2
3
4
5
6
7
8
from django.db import models


# Create your models here.

class Account(models.Model):
login = models.CharField(max_length=32)
password = models.CharField(max_length=32)

模型设计完成了,还需要在后台对其进行管理,所以我们把这个模型注册到管理系统:

以下为user/admin.py:

1
2
3
4
5
6
7
8
9
10
11
12
from django.contrib import admin

from .models import *


# Register your models here.

class AccountAdmin(admin.ModelAdmin):
list_display = ('login', 'nick')


admin.site.register(Account, AccountAdmin)

自动化配置

emmmmm,也许你现在在疑惑,怎么不用配置数据库?难道写几行python就能做到数据的存储?数据要去哪里查看?

其实Django也是需要配置数据库的,但Django实现了数据库的自动化建表(当时令我眼前一亮),其他地方也与传统的网站开发相差无几。

Django默认使用sqlite3,这是一个轻型的数据库,以文件的形式存储,不需要登陆到数据库主机什么的,小型项目最佳选择,甚至连配置都不用。

注册模块(应用)

当我们要自动配置数据库时,首先要把应用注册到当前站点的配置文件,这样django的管理器才会帮你生成这个应用下的数据表。

我们把user模块添加到INSTALLED_APPS list里就OK了,修改如下文件:

以下为mysite/settings.py的片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ...其它代码...

# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
]

# ...其它代码...

生成数据库

我们已经把模块注册好了,接下来就要生成其数据表了,执行以下命令:

1
2
3
4
# 生成自动生成数据表脚本
python3 manage.py makemigrations
# 执行自动生成
python3 manage.py migrate

至此,数据库已经自动生成好了,默认位置是在项目目录下的db.sqlite3,你可以使用sqlite3的数据库管理软件进行打开,对其进行查看。

自动生成的数据库

你可以选择sqlite3以外的数据库,如mysql等等,不过需要另外进行配置,这个日后再谈,个人感觉小项目并不需要更换数据库。

登陆后台

数据库也生成好了,现在已经迫不及待的想要进入后台了吧。

首先我们要启动服务器,执行以下命令:

1
2
# 如果你使用的是pycharm,直接点右上角的运行就可以了。
python3 manage.py runserver 8000

然后你可以通过http://localhost:8000/admin进行访问后台。

创建管理员

如果你现在打开了后台,你会发现,你没有账号,没法登陆233333333333。

来来来,创建一个,执行以下命令:

1
2
# 创建超级用户
python3 manage.py createsuperuser

现在你就可以登陆了,登陆成功的话,如下图:

管理后台页面-1

管理后台页面-2

管理后台页面-3

管理后台页面-4

是不是很棒?自动帮你做好了管理页,虽然有点丑,不过无所谓,后台不是给用户看的。

补充

写完之后发现忘了一个地方,那就是settings.py的基本设置。

1
2
3
4
5
6
7
8
9
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

# LANGUAGE_CODE的设置可以参考django.conf.locale下面的目录名。
LANGUAGE_CODE = 'zh-Hans'

# 时区请参考以下页面的TZ列。
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
TIME_ZONE = 'Asia/Shanghai'

总结

简单的说,我现在看到的Django就是这样,能帮你解决很多繁琐的问题,后台做得很完善,虽然风格跟中国这边的设计差得远了,起码不用我去整数据库,这一部分就正中我红心了,而且让我接触到了sqlite这轻型数据库,我才知道原来数据库还能这么简单。

以后有空我会继续写Django的文章。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×