学习中心> Python Web 框架 Django 快速入门> 正文

Python Web 框架 Django 快速入门

4课时 |
29976人已学 |
免费
课程介绍

Django(发音:[`dʒæŋɡəʊ])是用Python语言编写的、开源的Web开发框架,它鼓励快速开发,并遵循MVC设计。

Django的主要目的是简便、快速的开发数据库驱动的网站,优势如下:

  • 它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架。
  • Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包,这使得Django具有很强的可扩展性。
  • 它还强调快速开发和DRY(Do Not Repeat Yourself)原则。

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

https://stackoverflow.com/questions/29846087/microsoft-visual-c-14-0-is-required-unable-to-find-vcvarsall-bat (参考)

 

七、创建应用

创建用户应用 $ 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  的模版技术实现

 

我的学习进度
请登录后查看您的学习进度!
立即登录
本课程相关云产品