python 使用django库进行Web 开发(一)

django Web 开发简介
Python Django 网站开发培训 – 2周入门 web后端开发 web服务端开发
django 简介|菜鸟教程

1、Django 简介:

Django 简介:来源django 简介|菜鸟教程

Django 是一个由 Python 编写的一个 开放源代码的 Web 应用框架

使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

MVC 优势:

  • 低耦合
  • 开发快捷
  • 部署方便
  • 可重用性高
  • 维护成本低

Python 加 Django 是快速开发、设计、部署网站的最佳组合。

特点

  • 强大的数据库功能
  • 自带强大的后台功能
  • 优雅的网址

【1】MVC 模型

MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC 以一种插件式的、松耦合的方式连接在一起。

模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
视图(V)- 图形界面,负责与用户的交互(页面)。
控制器(C)- 负责转发请求,对请求进行处理。

  • M : 模型 与数据库交互
  • T:模版 一个放数据的架子
  • V: 视图

简易图:

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

; 【2】MTV 模型

Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:

M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。

  • T 表示模板 (Template):负责如何把页面(html)展示给用户。
  • V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。

除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 Template,MTV 的响应模式如下所示:
简易图:

python 使用django库进行Web 开发(一)

用户操作流程图:

python 使用django库进行Web 开发(一)
解析:

用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数:

a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。
视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

2、django的安装和运行

pip install django

django-admin startproject myDjango

myDjango 是可以自定义的项目名

项目配置目录和项目本身目录同名,比较怪异,可以这样创建目录,结构更合理一些:


mkdir myDjango  && cd myDjango

django-admin startproject config .

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)
目录说明:
  • config: 项目的容器。
  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • config/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • config/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
    config/settings.py: 该 Django 项目的设置/配置。
  • config/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站”目录”。
  • config/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

python manage.py runserver 0.0.0.0:80

0.0.0.0 代表一切均可以访问
80 是可以自定义端口号

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

虽说 0.0.0.0 代表一切均可以访问,但外网ip还需配置 放行ip

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

实战开发:

; 3、url路由

Django 中的一个 Application就是项目里面的一个应用的意思。

一个项目包含多个 Application

一个 Application 通常就是一个相对独立的模块 ,实现相对独立的功能。

比如,我们可以把 这个系统的 管理员管理的功能 做在一个名字为 mgr的 Application里面,把 销售人员的操作 实现在另外一个名字为 sales的 Application里面。

一个 Application 本质上 就是一个 Python 包, 里面包含了一些应用相关的代码文件。

当然,一个项目分成多少个 Application 这完全取决你的设计。 你把所有的功能都放入一个大 Application内也可以实现功能,只是这样做,这个 Application特别的臃肿。

Application 缩写为 app
Django 中创建app 可以 通过执行命令,创建一个app目录,并在里面自动创建app常用的文件。

比如,现在我们需要一个app 专门处理 白月医药系统中销售员的 添加、修改、查询、删除请求。

我们就进入项目根目录,执行下面的命令。

python manage.py startapp sales

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

url路由设置的入口文件:

python 使用django库进行Web 开发(一)
在 urlpatterns 列表变量中添加一条路由信息,结果如下:
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),
]

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

有的时候,我们的项目比较大的时候, 请求的url 会特别多。

【1】创建路由子表

python 使用django库进行Web 开发(一)
路由子表 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】修改主路由表

config/urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),

    path('sales/', include('sales.urls')),
]

【2】修改views.py

sales/views.py:

from django.shortcuts import render

from django.http import HttpResponse

def listorders(request):
    return HttpResponse("下面是系统中所有的订单信息。。。111")

def listorders2(request):
    return HttpResponse("下面是系统中所有的订单信息。。。222")

def listorders3(request):
    return HttpResponse("下面是系统中所有的订单信息。。。333")

python 使用django库进行Web 开发(一)

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

4、创建数据库和表

后端开发基本都需要操作数据,包括数据的 存储、查询、修改、删除。

通常,这些都是通过数据库来完成的。目前业界最广泛使用的数据库还是:关系型数据库。

关系型数据库系统,常用的开源数据库有 mysqlpostgresql

但是上面这些数据库,都需要我们安装数据库服务系统 和 客户端库,比较麻烦,现在我们先使用另一种更简单的 数据库 sqlite

sqlite 没有 独立的数据库服务进程,数据操作被做成库直接供应用程序调用。 Django中可以直接使用,无须先搭建数据服务。

后面大家要使用 mysql 等其他数据库 只需修改一些配置就可以了。

项目中数据库的配置在 config/settings.py 中,这里
django默认使用 sqlite数据库,而且创建项目时自动生成 db.sqlite文件

python 使用django库进行Web 开发(一)

虽然有 db.sqlite文件,但我们创建数据库,还需要执行如下命令

python manage.py migrate

python 使用django库进行Web 开发(一)

python 使用django库进行Web 开发(一)

;

数据库 表定义和表记录之间的关系 就像 类和实例 之间的关系,Django 就让开发者 通过 类 和 实例的操作 来对应 数据库 表 和记录的操作。

Django 里面, 数据库表的操作,包括 表的定义、表中数据的增删改查,都可以通过 Model 类型的对象进行的。

通常,在Django中

  • 定义一张数据库的表 就是定义一个继承自 django.db.models.Model 的类
  • 定义该表中的字段(列), 就是定义该类里面的一些属性
  • 类的方法就是对该表中数据的处理方法,包括 数据的增删改查

这样,开发者对数据库的访问,从 原来的使用底层的 sql 语句,变成 面向对象的开发,通过一系列对象的类定义 和方法调用就可以 操作数据库。

首先 极大的简化了我们应用中的数据库开发,因为无需使用sql语句操作数据库了, 提高了开发的效率;

其次 屏蔽了 不同的数据库访问的底层细节,基本做到了 开发好代码后,如果要换数据库,几乎不需要改代码, 修改几个配置项就可以了。

这种 通过 对象 操作数据库 的方法 被称之为 ORM (object relational mapping),下面我们就来看怎样使用。

首先,我们再创建一个名为 common的应用目录, 里面存放我们项目需要的一些公共的表的定义。

python manage.py startapp common

python 使用django库进行Web 开发(一)
Django是通过定义类来定义数据库表的
所以,我们要定义数据库的表,无需执行sql语句,只需要在app目录下面 定义特殊的类就可以了。

数据库表的定义,一般是放在app目录中的 models.py里面的。

打开 common/models.py,发现里面是空的,因为我们还没有定义我们的业务所需要的表。

我们修改它,加入如下内容
common/models.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)

这个 Customer 类继承自 django.db.models.Model, 就是用来定义数据库表的。

里面的 namephonenumberaddress 是该表的3个字段。

定义表中的字段 就是定义一些静态属性,这些属性是 django.db.models 里面的各种 Field 对象,对应不同类型的字段。

  • 这里的3个字段 都是 CharField 对象,对应 varchar类型的数据库字段。
  • 后面的参数 max_length 指明了该 varchar字段的 最大长度。
  • Djanog 有很多字段对象类型, 对应不同的类型的数据库字段。

在项目的配置文件 config/settings.py 中, INSTALLED_APPS 配置项 加入如下内容

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'common.apps.CommonConfig',
]

python 使用django库进行Web 开发(一)

common.apps.CommonConfig告诉 DjangoCommonConfigcommon/apps.py 文件中定义的一个应用配置的类。

common.apps.CommonConfig => 应用名.文件名.类名

python 使用django库进行Web 开发(一)
from django.apps import AppConfig

class CommonConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'common'

CommonConfig 是 AppConfig的 子类, 就表示这个是应用的配置类。

这里 name = ‘common’ , name 是用来定义 应用的python模块路径的。 这里就是说 应用 模块路径为 common 。

现在Django知道了我们的 common 应用, 我们可以在项目根目录下执行命令

python manage.py makemigrations common

通知Django , 去看看common这个app里面的models.py ,我们已经修改了数据定义, 你现在去产生相应的更新脚本。

python 使用django库进行Web 开发(一)

产生了 common\migrations\0001_initial.py文件,这个脚本就是相应要进行的数据库操作代码。


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)),
            ],
        ),
    ]

python 使用django库进行Web 开发(一)

python manage.py migrate

python 使用django库进行Web 开发(一)

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

; 5、修改数据库和表

例如要新增 QQ字段

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 = models.CharField(max_length=30)

python manage.py makemigrations common

python 使用django库进行Web 开发(一)

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 = models.CharField(max_length=30, null=True)

又生成新文件 common\migrations\0002_customer_qq.py

python 使用django库进行Web 开发(一)

python manage.py migrate

python 使用django库进行Web 开发(一)
python 使用django库进行Web 开发(一)

6、Django 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.

python 使用django库进行Web 开发(一)

访问 http://127.0.0.1/admin/

python 使用django库进行Web 开发(一)

python 使用django库进行Web 开发(一)

;

from django.contrib import admin

from .models import Customer

admin.site.register(Customer)
  • 方法一:需要修改应用里面的 管理员 配置文件 common/admin.py,注册我们定义的model类\
  • 方法二: 需要修改应用里面的 common/models.py
    python 使用django库进行Web 开发(一)

python 使用django库进行Web 开发(一)

python 使用django库进行Web 开发(一)

7 、读取数据库数据

现在我们来实现一个功能:浏览器访问 sales/customers/ ,我们的服务端就返回系统中所有的客户记录给浏览器。
我们先实现一个函数,来处理浏览器发出的URL为 sales/customers/ 的访问请求, 我们需要返回 数据库中 customer 表 所有记录。

Django 中 对数据库表的操作, 应该都通过 Model对象 实现对数据的读写,而不是通过SQL语句。
比如,这里我们要获取 customer 表 所有记录, 该表是和我们前面定义的 Customer 类管理的。

我们可以这样获取所有的表记录:

在文件 sales/views.py 中,定义一个 listcustomers 函数,内容如下:

from django.http import HttpResponse

from common.models import Customer

def listcustomers(request):

    qs = Customer.objects.values()

    retStr = ''
    for customer in qs:
        for name, value in customer.items():
            retStr += f'{name} : {value} | '

        retStr += ''

    return HttpResponse(retStr)

Customer.objects.values() 就会返回一个 QuerySet 对象,这个对象是Django 定义的,在这里它包含所有的Customer 表记录。

我们还需要修改路由表, 加上对 sales/customers/url请求的 路由。

前面,我们在 config\urls.py 主路由文件中,已经有如下的记录了

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),

    path('sales/', include('sales.urls')),

]

python 使用django库进行Web 开发(一)

我们只需修改 sales/urls.py 即可

from django.urls import path
from sales.views import listcustomers

urlpatterns = [

    path('customers/', listcustomers)

]

python 使用django库进行Web 开发(一)

访问 http://127.0.0.1/sales/customers/

python 使用django库进行Web 开发(一)

有的时候,我们需要根据过滤条件查询部分客户信息。

比如,当用户在浏览器输入 /sales/customers/?phonenumber=13000000001 ,要求返回电话号码为 13000000001 客户记录。
我们可以通过 filter 方法加入过滤条件,修改view里面的代码,如下所示

from django.http import HttpResponse

from common.models import Customer

def listcustomers(request):

    qs = Customer.objects.values()

    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)

python 使用django库进行Web 开发(一)

Original: https://blog.csdn.net/weixin_46703850/article/details/121479796
Author: 一个平凡de人
Title: python 使用django库进行Web 开发(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734132/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球