首先,windows、Django、mysql和vscode是本文用到的工具
1、安装python环境和mysql数据库
(a) 安装mysql数据库,需要注意的是把db移到别的盘,在另一篇有讲,详细教程也有贴,自行查看。
(b) python环境的话,我比较倾向于用anaconda3去装python3.5,喜欢用最新的版本的python。官网可下载。anaconda package 可手动下载需要的包。或者conda或pip
2、推荐vscode代码编辑环境
3、新建Django项目
(1)新建一个文件夹,cd到该文件下,创建项目:(首先django的库别忘pip下来)
django-admin startproject oa #新建gjango项目,并用vscode打开。操作如下
code . 注意后面有个点。这是将vscode的路径加到path里,所以可以从这里直接打开,点表示将现在路径作为项目工作空间。生成的文件目录如下:
settings.py是配置项目的路径、数据库等,默认是sqlite,我采用mysql数据库存储数据。url.py是路由路径。manage.py是一个工具。可以通过manage.py拉起整个项目。到现在为止,你可以在控制台通过如下命令拉起项目:
python manage.py runserver 0.0.0.0:8000 #在此之前,可以通过python manage.py help查看可用命令
E:\bin\Anaconda3\python.exe manage.py runserver 0.0.0.0:8000 #我这里用的是这样的方式,指定python去调用。因为版本比较多
在浏览器试试http://127.0.0.1:8000/admin/,访问一下django提供的后台管理,满强大的。
(2)发现admin需要用户名和密码。这样的话,就先要去settings.py文件配置mysql数据库,同时需要在settings.py同目录下的__init__.py文件里添加以下两行(别忘下载pymysql包):
import pymysql
pymysql.install_as_MySQLdb()
然后修改settings.py文件下数据库配置,如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_oa',
'USER': 'root',
'PASSWORD': '*****',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
ALLOWED_HOSTS = ['*'] # *设置url,在浏览器上访问的。可设置主机ip,然后用http://*:8000/admin去访问
然后用以下命令在控制台创建超级用户,邮箱可不写:
python manage.py createsuperuser #创建超级用户
如果报右边的错误,
按照如下命令再执行一遍:
python manage.py migrate
python manage.py createsuperuser #先执行上面的,再执行这个就ok了
这是因为在创建超级用户之前要做一个数据库迁移。
(3)接下来,是创建自己的app了。 用以下命令创建好之后,需要在settings.py里注册app(如下)。
python manage.py startapp app #app是自己应用的名字
接下来,比如你在自己的mysql里已经建好表了,那么就可以采用数据迁移的方式,直接与django里的models绑定:
保证django项目已经运行(runserver)起来(很重要!!!)
python manage.py inspectdb #这个命令可以查看现有的模型文件(models.py)!!!!!!!!!!!!
E:\codewyan\oa>python manage.py makemigrations #采用这两条命令,出现如下提示,则成功
Migrations for 'demo':
demo\migrations\0001_initial.py
- Create model OaChannelTable
- Create model OaPropTable
E:\codewyan\oa>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, demo, sessions
Running migrations:
Applying demo.0001_initial... OK
接下来,就可以在自己的views.py里访问models里的类(models会将数据表映射为类,然后采用类名.objects.all()[:10]访问数据库,得到一个查询的queryset)。
坑还有很多,笔者在后面的学习中会不断积累并记录的。