中华视窗是诚信为本,市场在变,我们的诚信永远不变...
Web 开发简介
网站开发培训 – 2周入门 web后端开发 web服务端开发
简介|菜鸟教程
1、 简介:
简介:来源 简介|菜鸟教程
基本介绍
是一个由 编写的一个开放源代码的 Web 应用框架。
使用 ,只要很少的代码, 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ (控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
MVC 优势:
加 是快速开发、设计、部署网站的最佳组合。
特点
MVC 与 MTV模型【1】MVC 模型
MVC 模式(Model–view–)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器()。
MVC 以一种插件式的、松耦合的方式连接在一起。
模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
视图(V)- 图形界面,负责与用户的交互(页面)。
控制器(C)- 负责转发请求,对请求进行处理。
简易图:
用户操作流程图:
【2】MTV 模型
的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同, 的 MTV 分别是指:
M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 ,MTV 的响应模式如下所示:
简易图:
用户操作流程图:
解析:
用户通过浏览器向我们的服务器发起一个请求(),这个请求会去访问视图函数:
a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。
视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
2、的安装和运行 安装
pip install django
创建项目
django-admin startproject myDjango
是可以自定义的项目名
项目配置目录和项目本身目录同名,比较怪异,可以这样创建目录,结构更合理一些:
# 执行命令创建项目目录,并且进入到项目目录
mkdir myDjango && cd myDjango
# 然后执行命令 创建manage.py 和 项目配置目录 名为 config
django-admin startproject config .
目录说明:
启动服务器
python manage.py runserver 0.0.0.0:80
0.0.0.0 代表一切均可以访问
80 是可以自定义端口号
放行ip
虽说0.0.0.0 代表一切均可以访问,但外网ip还需配置 放行ip
同理
实战开发:
3、url路由创建项目的
中的一个就是项目里面的一个应用的意思。
一个项目包含多个。
一个 通常就是一个相对独立的模块 ,实现相对独立的功能。
比如,我们可以把 这个系统的 管理员管理的功能 做在一个名字为 mgr的里面,把 销售人员的操作 实现在另外一个名字为 sales的里面。
一个 本质上 就是一个 包, 里面包含了一些应用相关的代码文件。
当然,一个项目分成多少个 这完全取决你的设计。 你把所有的功能都放入一个大内也可以实现功能,只是这样做,这个特别的臃肿。
缩写为 app
中创建app 可以 通过执行命令,创建一个app目录,并在里面自动创建app常用的文件。
比如,现在我们需要一个app 专门处理 白月医药系统中销售员的 添加、修改、查询、删除请求。
我们就进入项目根目录,执行下面的命令。
python manage.py startapp sales
配置url
url路由设置的入口文件:
在 列表变量中添加一条路由信息,结果如下:
from django.contrib import admin
from django.urls import path
from sales.views import listorders
urlpatterns = [
path('admin/', admin.site.urls),
# 添加如下的路由记录
path('sales/orders/', listorders),
]
路由子表
有的时候,我们的项目比较大的时候, 请求的url 会特别多。
【1】创建路由子表
路由子表sales/urls.py:
from django.urls import path
from sales.views import listorders,listorders2,listorders3
urlpatterns = [
# 添加如下的路由记录
path('1/', listorders),
path('2/', listorders2),
path('3/', listorders3),
]
【2】修改主路由表
/urls.py:
from django.contrib import admin
from django.urls import path, include
# from sales.views import listorders
urlpatterns = [
path('admin/', admin.site.urls),
# 添加如下的路由记录
path('sales/', include('sales.urls')),
]
【2】修改views.py
sales/views.py:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息。。。111")
def listorders2(request):
return HttpResponse("下面是系统中所有的订单信息。。。222")
def listorders3(request):
return HttpResponse("下面是系统中所有的订单信息。。。333")
4、创建数据库和表 选择数据库
后端开发基本都需要操作数据,包括数据的 存储、查询、修改、删除。
通常,这些都是通过数据库来完成的。目前业界最广泛使用的数据库还是:关系型数据库。
关系型数据库系统,常用的开源数据库有 mysql 和 。
但是上面这些数据库,都需要我们安装数据库服务系统 和 客户端库,比较麻烦,现在我们先使用另一种更简单的 数据库。
没有 独立的数据库服务进程,数据操作被做成库直接供应用程序调用。 中可以直接使用,无须先搭建数据服务。
后面大家要使用mysql 等其他数据库 只需修改一些配置就可以了。
创建数据库
项目中数据库的配置在/.py 中,这里
默认使用数据库,而且创建项目时自动生成db.文件
虽然有db.文件,但我们创建数据库,还需要执行如下命令
python manage.py migrate
使用 数据库工具
通过对象操作数据库的方法 (ORM)
数据库表定义和表记录之间的关系 就像类和实例 之间的关系, 就让开发者 通过 类 和 实例的操作 来对应 数据库 表 和记录的操作。
里面, 数据库表的操作,包括 表的定义、表中数据的增删改查,都可以通过 Model 类型的对象进行的。
通常,在中
这样,开发者对数据库的访问,从原来的使用底层的 sql 语句,变成面向对象的开发,通过一系列对象的类定义 和方法调用就可以 操作数据库。
首先 极大的简化了我们应用中的数据库开发,因为无需使用sql语句操作数据库了, 提高了开发的效率;
其次 屏蔽了 不同的数据库访问的底层细节,基本做到了 开发好代码后,如果要换数据库,几乎不需要改代码, 修改几个配置项就可以了。
这种 通过 对象 操作数据库 的方法 被称之为 ORM ( ),下面我们就来看怎样使用。
定义数据库表
首先,我们再创建一个名为的应用目录, 里面存放我们项目需要的一些公共的表的定义。
python manage.py startapp common
是通过定义类来定义数据库表的
所以,我们要定义数据库的表,无需执行sql语句,只需要在app目录下面 定义特殊的类就可以了。
数据库表的定义,一般是放在app目录中的 .py里面的。
打开 /.py,发现里面是空的,因为我们还没有定义我们的业务所需要的表。
我们修改它,加入如下内容
/.py:
from django.db import models
class Customer(models.Model):
# 客户名称
name = models.CharField(max_length=200)
# 联系电话
phonenumber = models.CharField(max_length=200)
# 地址
address = models.CharField(max_length=200)
这个 类继承自 .db..Model, 就是用来定义数据库表的。
里面的 name、、 是该表的3个字段。
定义表中的字段 就是定义一些静态属性,这些属性是.db. 里面的各种 Field 对象,对应不同类型的字段。
创建数据库表
在项目的配置文件 /.py 中, 配置项 加入如下内容
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 加入下面这行
'common.apps.CommonConfig',
]
.apps.告诉 , 是 /apps.py 文件中定义的一个应用配置的类。
.apps. => 应用名.文件名.类名
/apps.py:
from django.apps import AppConfig
class CommonConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'common'
是 的 子类, 就表示这个是应用的配置类。
这里 name = ‘’ , name 是用来定义 应用的模块路径的。 这里就是说 应用 模块路径为 。
通知更新脚本
现在知道了我们的 应用, 我们可以在项目根目录下执行命令
python manage.py makemigrations common
通知 , 去看看这个app里面的.py ,我们已经修改了数据定义, 你现在去产生相应的更新脚本。
产生了\\.py文件,这个脚本就是相应要进行的数据库操作代码。
# Generated by Django 3.2.9 on 2021-11-23 02:12
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Customer',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('phonenumber', models.CharField(max_length=200)),
('address', models.CharField(max_length=200)),
],
),
]
执行.py真正去数据库创建表了
python manage.py migrate
刷新数据库,查看新创建的表
5、修改数据库和表
例如要新增QQ字段
修改\.py
from django.db import models
class Customer(models.Model):
# 客户名称
name = models.CharField(max_length=200)
# 联系电话
phonenumber = models.CharField(max_length=200)
# 地址
address = models.CharField(max_length=200)
# 新增`QQ`字段
qq = models.CharField(max_length=30)
通知更新脚本
python manage.py makemigrations common
为QQ字段 增加缺省值(即默认值),或允许为null
from django.db import models
class Customer(models.Model):
# 客户名称
name = models.CharField(max_length=200)
# 联系电话
phonenumber = models.CharField(max_length=200)
# 地址
address = models.CharField(max_length=200)
# 新增`QQ`字段 null=True:允许为null blank=True:允许没有值
qq = models.CharField(max_length=30, null=True)
又生成新文件\\.py
执行新文件去数据库创建修改表
python manage.py migrate
6、 Admin 管理数据 创建一个超级管理员账号
进入到项目的根目录,执行如下命令,依次输入你要创建的管理员的 登录名、email、密码。
E:\Project\Python\DjangoStudy\myDjango>python manage.py createsuperuser
Username (leave blank to use 'ywl'): admin
Email address: id_07225489@qq.com
Password:
Password (again):
Superuser created successfully.
管理员登录
访问
让表显示
from django.contrib import admin
from .models import Customer
admin.site.register(Customer)
7 、读取数据库数据 获取全部记录
现在我们来实现一个功能:浏览器访问 sales// ,我们的服务端就返回系统中所有的客户记录给浏览器。
我们先实现一个函数,来处理浏览器发出的URL为sales// 的访问请求, 我们需要返回 数据库中 表 所有记录。
中 对数据库表的操作, 应该都通过 Model对象 实现对数据的读写,而不是通过SQL语句。
比如,这里我们要获取 表 所有记录, 该表是和我们前面定义的 类管理的。
我们可以这样获取所有的表记录:
在文件sales/views.py 中,定义一个 函数,内容如下:
from django.http import HttpResponse
# 导入 Customer 对象定义
from common.models import Customer
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
# 每条表记录都是是一个dict对象,
# key 是字段名,value 是 字段值
qs = Customer.objects.values()
# 定义返回字符串
retStr = ''
for customer in qs:
for name, value in customer.items():
retStr += f'{name} : {value} | '
#
表示换行
retStr += '
'
return HttpResponse(retStr)
..() 就会返回一个 对象,这个对象是 定义的,在这里它包含所有的 表记录。
我们还需要修改路由表, 加上对sales//url请求的 路由。
前面,我们在\urls.py 主路由文件中,已经有如下的记录了
from django.contrib import admin
from django.urls import path, include
# from sales.views import listorders
urlpatterns = [
path('admin/', admin.site.urls),
# 添加如下的路由记录
path('sales/', include('sales.urls')),
]
我们只需修改 sales/urls.py 即可
from django.urls import path
from sales.views import listcustomers
urlpatterns = [
# 添加如下的路由记录
path('customers/', listcustomers)
]
访问
过滤条件
有的时候,我们需要根据过滤条件查询部分客户信息。
比如,当用户在浏览器输入 /sales//?= ,要求返回电话号码为 客户记录。
我们可以通过 方法加入过滤条件,修改view里面的代码,如下所示
from django.http import HttpResponse
# 导入 Customer 对象定义
from common.models import Customer
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
qs = Customer.objects.values()
# 检查url中是否有参数phonenumber,没有则返回Nome
ph = request.GET.get('phonenumber', None)
# 如果有,添加过滤条件
if ph:
qs = qs.filter(phonenumber=ph)
# 定义返回字符串
retStr = ''
for customer in qs:
for name,value in customer.items():
retStr += f'{name} : {value} | '
#
表示换行
retStr += '
'
return HttpResponse(retStr)