且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Django 项目构建和基础知识 | 学习笔记

更新时间:2022-09-07 23:31:28

开发者学堂课程【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 

https://***.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 的模版技术实现