开发者学堂课程【Python Web 框架 Django 快速入门:Django 项目构建和基础知识 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/604/detail/8810
Django 项目构建和基础知识
内容简介:
1、概述
2、Django 版本
3、安装 Django
4、创建 Django 项目
5、数据库配置
6、MySQL 数据库驱动
7、创建应用
8、注册应用
9、模型 Model
10、创建 User 的 Model 类
11、迁移 Migration
12、Django 后台管理
13、路由
一、概述
Django 采用 MVC 架构设计的开源的WEB快速开发框架
优点:
1、能够快速开发,如 Auth、Cache(一般不使用,可以进行一些页面缓存项目,用第三方 Cache 会更好)、模版(做不到前后端分离,获得数据后使用静态JS进行添加)
2、MVC 设计模式
3、实用的管理后台
4、自带 ORM、Template、Form、Auth 核心
5、组件
6、简洁的 URL 设计
7、周边插件丰富
缺点:
1、重,因为东西大而全
2、同步阻塞
所以 Django 的设计目标就是一款大而全,便于企业快速开发项目的框架,因此企业应用较广
二、Django 版本
Django Version Python Version
1.8 2.7, 3.2, 3.3, 3.4, 3.5
1.9, 1.10 2.7, 3.4, 3.5
1.11 2.7, 3.4, 3.5,3.6
2.0 3.4, 3.5, 3.6
2.1 3.5, 3.6, 3.7
(推荐使用1.11之后的版本,1.11之前的版本有一些变化,2.0版本使用少是因为有一部分人依赖插件,而这些插件还没有很好地支持3.0,若是自己写代码,需要对框架很了解,若不了解就需要借用插件)
三、安装Django
Python 使用3.5.3
Django 的下载地址:http:www.djangoproject.com/download/
$ plp install django ==1.11
本次使用 Django1.11版本,请在虚拟环境中安装
在虚拟环境路径中,Lib/site.packages/django/bin 下有一个 django-admin.py一起从它开始
(Django 框架目前已经提供了很好用的创建项目的方式,使用社区版本可以解决很多问题,点一下基本命令即可)
(在安装过程中可能会出现一些问题网络原因、当前windows版本下编译)
安装完以后即可使用$ django-admin:打开 Python 目录,Django 已存在,点击site packages(第三方库),打开 django-admin
在虚拟环境中输入 django-admin,会出现很多命令,只需要记住“start project”,其他的不需要 Django 来进行操作。
四、创建 Django 项目
继续输入“ startproject blog .”(在已有项目下创建 project, 如果不加.就会有两个 blog 目录,有一个多余的目录),再回去查看就会以 blog10 作为 Django 项目的根目录,项目里面有 manage.py,进入 blog 文件夹,有_init_py( 目前为空,项目包自带)、 settings.py (进行全局配置,重要文件)、urls.py、wsgi.py
打开settings.py,MIDDLEWARE 相当于拦截器
ROOT URLCONF = ‘blog . urls’
TEMPLATES模版
打开 urls.py,出现 url(r'^admin',admin.site.urls)
$ django- admin startproject blog .
F:\CLASSES\TPROJECTS\BLOG10
|—manage.py
|__blog
|— settings.py
|— urls.py
|— wsgi.py
|__ _init_.py
上句命令就在当前项目根目录中创建了 Django 项目的初始文件。
重要文件说明:
•manage.py:本项目管理的命令行工具,应用创建、数据库迁移等都使用它完成
•blog/settings.py:本项目的配置文件,数据库参数等
blog/urls.py:URL 路径映射配置,默认情况下,只配置 /admin 的路由
•blog/wsgi:定义 WSGI 接口信息,一般无需改动
五、数据库配置
使用数据库,需要修改默认的数据库配置,在主项目的 settings.py 下的DATABASES,默认使用的sqlite,修改为mysql
输入DATABASES =
default’: {
‘ENGINE’ : ‘django.db.backends.mysql’,
‘NAME’ : ‘wayne’,
‘PASSWORD’ : ‘wayne’,
‘HOST’ : ‘192.168.142.140’,
‘PORT’ : ‘3306’
}
}
HOST 数据库主机,缺省是空字符串,代表 localhost,如果是‘/’开头表示使用 Unix Socket 连接。
POST 端口
USER 用户名
PASSWORD 密码
NAME 库名
OPTIONS 选项,字典,参考 MySOL 文档
数据库引擎ENGINE
内建的引擎有
‘django.db.backends.postgresql’
‘django.db.backends.mysql’
‘django.db.backends.sqlite3’
‘django.db.backends.oracle’
六、MySQL 数据库驱动
可以查看文档说明
http://docs.djangoproject.com/en/2.0/ref/databases/
Django 支持 MySQL 5.5+
Django 官方推荐使用本地驱动mysqlclient 1.3.7 +(看1.11文档)
输入$ pip install mysqlclient
windows 下安装错误 error:Microsoft Visual C++ 14.0 is required
解决方法:
1、下载 Visual C++ Redistributable Packages 2015、2017 安装,但是即使安装后,确实看到了 V14 库,也不保证安装 mysqlclient 就成功
2、直接安装编译好的wheel文件
mysqlclient-1.3.13-cp35-cp35m-win _amd64. whl , python 3.5 使用
mysqlclient-1.3.13-cp36-cp36m-win _amd64. whl , python 3.6 使用
$ pip install mysqlclient-1.3.13-cp34m-win_amd64.whl
七、创建应用
创建用户应用 $ python manage.py startapp user
该应用完成以下功能
•用户注册
•用户登录
•TODO
创建应用后,项目根目录下产生一个 user 目录,有如下文件:
•admin.py 管理站点模型的声明文件
•models.py 模型层 Model 类定义
•views.py 定义 URL 响应函数
•migrantions 包 数据迁移文件生成目录
•apps.py 应用的信息定义文件
八、注册应用
在 settings.py 中,增加 user 应用,目的是为了后台管理 admin 使用,或迁移migrate 使用
INSTALLED_APPS = [
‘django.contrib.admin’ ,
‘django.contrib.auth ’ ,
‘django.contrib.contenttypes’ ,
‘django.contrib.sessions’ ,
‘django.contrib.messages’ ,
‘django.contrib.startfiles’ ,
‘user’ ,
]
九、模型 Model
字段类 说明
AutoField 自增的整数字段。如果不指定,django 会为模型类自动增加主键字段TODO
BooleanField 布尔值字段,True 和 False 对应表单控件Checkboxinput
NullBooleanField 比 BooleanField 多一个 null 值
CharField 字符串,max_length 设定字符长度对应表单控件 Textinput
TextField 大文本字段,一般超过4000个字符使用,对应表单控件Textarea
IntegerField 整数字段
BigintegerField 更大整数字段,8字节
DecimalField 使用 Python 的 Decimal 实例表示十进制浮点数。max_digits总位数,decimal_place 小数点后的位数
FloatField Python 的 Float 实例表示的浮点数DateField 使用 Python 的 admin.date 实例表示的日期
auto_now=False 每次修改对象自动设置为当前时间。
auto_now_add=False 对象第一次创建时自动设置为当前时间。
auto_now_add、auto_now、default 互斥 对应控件为 Textinput,关联了一个js编写的日历控件
TimeField 使用 Python 的 datetime.time 实例表示的时间,参数同上
DateTimeField 使用 Python 的 datetime.time 实例表示的时间,参数同上
FileField 一个上传文件的字段
ImageField 继承了 FileField 的所有属性和方法,但是对上传的文件进行校验,确保是一个有效的图片
字段选项
值 说明
db_column 表中字段的名称。如果未指定,则使用属性名
primary_key 是否主键
unique 是否是唯一键
default 缺省值。这个缺省值不是数据库字段的缺省值,而是新对象产生的时候被填入的缺省值 TODO
null 表的字段是否可为 null 默认为 False
blank Django表单验证中,是否可以不填写,默认 False
db_index 字段是否有索引
关系类型字段类
类 说明
ForeignKey 外键,表示一对多
ForeignKey(‘production.Manufacturer’)
自关联ForeignKey(‘self’)
ManyToManyField 表示多对多
OneToOneField 表示一对一,一对多时,自动创建会增加_id后缀。
•从一访问多,使用 对象.小写模型类 _set
•从一访问一,使用 对象.小写模型类
访问 id 对象.属性 _id
十、创建 User 的 Model 类
•基类 models.Model
•表名不指定默认使用 _ 。使用 Meta 类修改表名
from django .db impot models
#Create your models here .
class User (models.Model):
class Meta:
db_table = ‘user’
Id = models.AutoField (primary _key =True)
name = models.CharField (max _length=48,null =False)
email = models.CharField (max _length=64, unique =True,
null =False)
password =models.CharField (max _length=128,null =False)
def __repr__(self):
return ‘’.format (self.id, self.name)
__str__ = __repr__
十一、迁移 Migration
迁移:~0从模型定义生成数据库的表
1、生成迁移文件“”
$ python manage.py makemigration
Migrations for ‘user’:
user \migrations \0001_initial.py
- Create model User
生成如下文件
user
|—migrations
|— 0001_initial.py
|__ _init_.py
TODO ,修改过 Model 类,还需要调用 makemigrations 吗?还是直接 migrate?总之序号会增加
注意:迁移的应用必须在setting.py 的 INSTALLED_APPS 中注册
# 0001_initial.py 文件内容如下
class Migration (migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations .CreateModel(
name = ‘User’,
fields =[
(‘id’ ,models.AutoField (primary _key =True, serialize=False)),
‘name’ ,models.CharField (max _length =48)) ,
‘email’ ,models.CharField (max _length =64, unique =True)) ,
‘password’ ,models.CharField (max _length =128)) ,
] ,
options ={
‘db_table’: ‘user’ ,
}
)
]
2、执行迁移生成数据库的表
使用命令 $ python manage.py migrate
执行了迁移,还同时生成了 admin 管理用的表
查看数据库,user 表创建完成,字段设置完全正确
十二、Django 后台管理
1、创建管理员
管理员用户名 admin
密码 adminadmin
具体操作:
$ python manage.py createsuperuser
Username (leave blank to ‘wayne’):admin
Email address
Password:
Password (again):
Superuser create successfully
2、本地化
settings.py 中设置语言、时区
语言名称可以查看 django\contrib\admin\locale 目录
具体操作:
LANGUAGE _CODE =‘zh-Hans’ # ‘en-us’
USE_TZ = True
TIME _ZONE = ‘Asia\Shanghai’ # ‘UTC’
3、启动 WEB Server
python manage.py runserver
默认启动 8000 端口
将会出现“正常工作了!祝贺你的第一个由Django驱动的页面。”
4、登陆后台管理
后台管理地址 http://127.0.0.1:8000/admin
5、注册应用模块
在 user 应用的 admin.py 添加
from django.contrib import admin
from .models import User
# Register your models here.
admin.register (User) # 注册
user就可以在后台进行增删改了
十三、路由
编写 WSGI 库框架项目中路由功能就是实现 URL 模式匹配和处理函数之间的映射。对于 Django 也是如此。路由配置要在项目的 urls.py 中配置,也可以多级配置,在每一个应用中,建立一个urls.py文件配置路 由映射
url函数
url(regex、view、kwargs=None),进行模式匹配
regex:正则表达式,与之匹配的URL会执行对应的第二个参数 view
view:视图使用的字典类型的参数
name:用来反向获取 URL
urls.py 内容如下:
from django.conf.urls import url
from django.contrib import admin
from django.http import HttpResponse
def index (request:HttpResponse)
视图函数:请求进来返回响应
return HttpResponse (b ‘welcom to magedu.com’)
urlpatterns = [
url (r ‘^admin/ , admin.site urls) ,
url (r ‘^$’ ,index) ,
url (r ‘^index $’ ,index) ,
]
url (r ‘^index/$’ ,index)
http://127.0.0.1:8000/index/
可以访问
http://127.0.0.1:8000/index
可以访问,但会补一个
url (r ‘^index $’ ,index)
http://127.0.0.1:8000/index
可以访问
http://127.0.0.1:8000/index/
不可以访问
请求信息测试和JSON响应
from django.http import HttpRequest, HttpResponse, ]sonResponse
def index (request:HttpRequest):
视图函数:请求进来返回响应
d = {}
d[‘method’] = request.method
d[‘path ’] = request.path
d[‘path _info ’] = request.path _info
d[‘GETparams ’] = request.GET
return JsonResponse (d)
在项目中首页多数使用 HTML 显示,为了加载速度快,一般多使用静态页面。如果首页内容多,还有部分数据需要变化,将变化部分使用 AJAX 技术从后台获取数据。
本次,为了使用模版技术,将首页采用 Django 的模版技术实现