前言
学习web开发是一条艰辛的道路,那些令人讨厌的前端页面总是需要我们复制粘贴、复制粘贴,一旦修改,经常要同时修改多个文件。
页面做的最多的地方无疑是后台管理部分,一个模块,基本就要做出一套页面,比如:
- 增加内容页面
- 编辑内容页面(和增加内容的页面大部分内容相同)
- 内容列表页面(里面还要考虑筛选、搜索功能的实现)
做这些页面做多了,难免心生厌烦,比如我用什么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的原因)
# 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。)
# 安装django
pip3 install django
至此Django就安装完成了。
新建项目
打开终端,在work space(工作空间)下,执行以下命令:
# mysite为新建的站点的名称,可自定义。
django-admin startproject mysite
创建完成后,项目结构如下所示。
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到项目目录下,执行以下命令:
# user是我们将要新建的模块(应用)名称
python3 manage.py startapp user
执行命令后生成的文件如下所示:
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:
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:
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的片段:
# ...其它代码...
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
]
# ...其它代码...
生成数据库
我们已经把模块注册好了,接下来就要生成其数据表了,执行以下命令:
# 生成自动生成数据表脚本
python3 manage.py makemigrations
# 执行自动生成
python3 manage.py migrate
至此,数据库已经自动生成好了,默认位置是在项目目录下的db.sqlite3,你可以使用sqlite3的数据库管理软件进行打开,对其进行查看。
你可以选择sqlite3以外的数据库,如mysql等等,不过需要另外进行配置,这个日后再谈,个人感觉小项目并不需要更换数据库。
登陆后台
数据库也生成好了,现在已经迫不及待的想要进入后台了吧。
首先我们要启动服务器,执行以下命令:
# 如果你使用的是pycharm,直接点右上角的运行就可以了。
python3 manage.py runserver 8000
然后你可以通过http://localhost:8000/admin进行访问后台。
创建管理员
如果你现在打开了后台,你会发现,你没有账号,没法登陆233333333333。
来来来,创建一个,执行以下命令:
# 创建超级用户
python3 manage.py createsuperuser
现在你就可以登陆了,登陆成功的话,如下图:
是不是很棒?自动帮你做好了管理页,虽然有点丑,不过无所谓,后台不是给用户看的。
补充
写完之后发现忘了一个地方,那就是settings.py的基本设置。
# 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的文章。