《零基础学Python》Python的Web开发——Django框架的应用【十五】

整体文章目录

整体目录

一、 当前章节目录

在这里插入图片描述

二、常见的Web开发框架

  1. Django:一种快速的网络框架。
    (1)组件的合理集成。
    (2)对象关系映射和多数据库支持。
    (3)简洁的URL设计。
    (4)自动化的管理界面。
    (5)强大的开发环境
  2. Flask:一个轻量级的Web应用框架。
  3. Tornado:一个基于异步网络功能库的Web开发框架,与现在的主流Web服务器框架(包括大多数Python的框架)相比,最明显的区别是非阻塞式服务器,而且速度相当快。
  4. Web2py:一个为Python语音提供的全功能免费开源Web应用框架。
  5. 其他Web开发框架:
    (1)Zope
    (2)TurboGears
    (3)CherryPy
    (4)Pylons

三、MVC模式

3.1 MVC模式介绍

MVC是一种在软件工程中广泛使用的设计模式。特别适合于GUI设计和Web应用设计,可以方便地修改应用的表示层而不影响业务逻辑,或者修改底层业务逻辑而不影响其他部分。
(1)模型层次:包含了业务逻辑流程和状态,这些模型包含应用处理数据的方法。
(2)视图层次:包含最终用户的操作界面,包括输入数据和输出显示等。
(3)控制层次:可以实现对应用的具体控制。
在这里插入图片描述

3.2 MVC模式的优缺点

优点:

  1. 可以将业务逻辑和视图显示分开,从而实现简化处理、加速开发的目的,迅速实现用户需求。
  2. 有利于代码的管理,应用结构清晰,扩展性强。可以将代码分成多个部分来单独完成,只需要在各自的模块中定义好接口就可以了。

缺点:

  1. 需要进行比较详细的设计,严格分离会使得应用的调试比较困难。
  2. 在实际设计的时候,考虑到模块组合的复杂性,可以使得应用更加具有扩展性。

3.3 Django框架中的MVT

  • M代表模型:负责业务对象和数据库的关系映射。与MVC中的M功能相同。
  • V代表视图:负责业务逻辑,并在适当的时候调用Model和Template。与MVC中的C功能相同。
  • T代表模板:负责如何把页面展示给用户。与MVC中的V功能相同。
    在这里插入图片描述

四、Django开发环境的搭建

4.1 Django框架的安装

  1. Windows平台下安装Django框架
  2. Linux平台下安装Django框架
# 验证是否安装成功
In [1]: import django

In [2]: print(django.VERSION)
(3, 2, 3, 'final', 0)

4.2 数据库的配置

在setting.py文件中,可以通过设置下面的属性值来设置Django对数据库的访问。

  • ENGINE:此值用来设置数据库引擎的类型。其中可以设置的类型包括其SQLite3、MySQL、PostgreSQL和Ado_msSQL等。
  • NAME:此值用来设置数据库的名字。如果数据库引擎使用的是SQLite,需要指定全路径。
  • USER:此值用来指定连接数据库时候的用户名。
  • PASSWORD:此值用来指定使用用户DATABASE_USER的密码。当数据库引擎使用SQLite的时候,不需要设置此值。
  • HOST:此值用来指定数据库所在的主机。当此值为空的时候表示数据将保存在本机中。当数据库引擎使用SQLite的时候,不需要设置此值。
  • PORT:此值用来设置连接数据库时使用的端口号。当为空的时候将使用默认端口。同样的,此值不需要在SQLite数据库引擎中设置。
import pymysql

pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysql',           # 数据库库名(需提前创建好数据库)
        'USER': 'root',            # 用户名
        'PASSWORD': 'a',     # 连接密码
        'HOST': '127.0.0.1',   # 主机
        'PORT': '3306',             # mysql端口
    }
}

五、Django框架的基本应用

5.1 Web应用的创建

# 查看django-admin中支持的命令选项
D:\python例题源代码\ch15code\blog>django-admin help

# 查看特定命令选项的帮助
D:\python例题源代码\ch15code\blog>django-admin help startproject

# 迅速创建项目
D:\python例题源代码\ch15code>django-admin startproject blog

在这里插入图片描述

1)__ init __.py:这是一个空文件,其用途主要来指示Python语言将此网站目录当作是Python的包
2)manage.py:此文件中主要是使得网站管理员来管理Django项目
3)settings.py:这是此Django项目的配置文件
4)urls.py:此文件中包含URL的配置文件,这也是用户访问Django应用的方式
5)wsgi.py:此文件是Python> Web服务器网关接口,用来描述Web Server如何与Web应用通信的规范

5.2 Django中的开发服务器

# 启动内置服务器
D:\python例题源代码\ch15code\blog>python manage.py runserver 
  
D:\python例题源代码\ch15code\blog>python manage.py runserver 8001

D:\python例题源代码\ch15code\blog>python manage.py runserver 0.0.0.0:8000

在这里插入图片描述
在这里插入图片描述

5.3 创建数据库

# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
# 将生成的py文件应用到数据库
D:\python例题源代码\ch15code\blog>python manage.py migrate

在这里插入图片描述

5.4 生成Django应用

# 将生成的py文件应用到数据库
D:\python例题源代码\ch15code\blog>python manage.py startapp Account

1)_ pycache __:存储与cpython相关的文件,用于增强性能
2)migrations:用于在之后定义引用迁移功能
3) __ init __.py:这是一个空文件,在这里是必需的。用来将整个应用作为一个Python模块加载。
4)models.py:定义了数据模型相关的信息
5)views.py:包含此模型的相关视图操作
6)admin.py:用于编写Django自带的后台相关操作
7)tests.py:用于编写测试代码
8)apps.py:用于定义信息文件

5.5 创建数据模型

# models.py
from django.db import models

# Create your models here.

class Account(models.Model):
    """生成一个Account类"""
    username = models.CharField('用户名', max_length=30)
    password = models.CharField('密码', max_length=30)
    email = models.CharField('电子邮箱', max_length=100, blank=True)
    desc = models.TextField('描述', max_length=500, blank=True)

    def __unicode__(self):
        return self.username
# 在setting.py中加入
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Account',
]
# 创建更改的文件
D:\python例题源代码\ch15code\blog>python manage.py makemigrations

5.6 URL设计

请求的URL地址为“url/sub-url/”,Django在URL的配置文件中匹配此请求URL,并调用相应的方法。

[19/Jun/2021 10:57:50] “GET /url/sub-url/ HTTP/1.1” 404 2552

ROOT_URLCONF属性值中可以设置此URL的信息。在setting.py里的值是blog.urls,也就是说URL的信息定义在根目录下的urls.py文件中。

# urls.py
from django.contrib import admin
from django.urls import path, re_path
from Account.views import random_number
from Account.views import index

urlpatterns = [
    path('admin/', admin.site.urls),    # 管理界面
    path('index/', index),
    path('Account/random_number/', random_number),
]
# Account目录下的urls.py
from django.urls import path
from .import views

urlpatterns = [
    path('index/', views.index),
    path('random_number/', views.random_number)
]

在这里插入图片描述

5.7 创建视图

# 根目录下的urlsviews.py
from django.http import HttpResponse

def index(request):
    html = """<html>
                <title>Main</title>
                <body>
                    <h1>Main Page</h1><hr>
                </body>
              </html>"""
    return HttpResponse(html)

在这里插入图片描述

# Account目录下的views.py
import random
def random_number(request):
    body1 = "Random:  %f <br />" % random.random()
    body2 = "Random:  %f <br />" % random.random()
    body3 = "Random:  %f <br />" % random.random()

    html = "<html><body>" + body1 + body2 + body3 + "</body></html>"
    return HttpResponse(html)

在这里插入图片描述

5.8 模板系统

<!--blog目录下新建一个templates文件夹,新建一个index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Main</title>
</head>
<body>
    <h1>Main Page</h1>
    <h2 style="color:red">Hello World!</h2>
</body>
</html>
# 需要修改Account目录下的views.py文件
def index(request):
    return render(request, 'index.html')
# blog目录下的setting.py
TEMPLATES = [
    {
        # 部分省略
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        # 部分省略
    }
]

在这里插入图片描述

六、Django框架的高级应用

6.1 管理界面

  1. 确认在项目的配置文件INSTALLED_APPS属性中已经加入django.contrib.admin。
# setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Account',
]
  1. 确认是否生成了管理界面所需的表。如果没有则调用mannage.py的子命令makemigrations和migrate生成即可。(详细见5.3 创建数据库)

  2. 确认在项目根目录下的urls.py文件中已经有对管理界面的支持。打开urls.py文件,如下所示。

from django.contrib import admin
from django.urls import path, re_path
from Account.views import random_number
from Account.views import logout

urlpatterns = [
    path('admin/', admin.site.urls),    # 管理界面
    path('index/', index),
    path('Account/random_number/', random_number),
]
  1. 在浏览器中输入“http://127.0.0.1:8000/admin/”,将会出现如图所示的信息。
    在这里插入图片描述

  2. 创建超级用户名和密码。在命令行中使用createsuperuser命令创建用户相关信息。

D:\python例题源代码\ch15code\blog>python manage.py createsuperuser
Username(leave blank to use 'hchlcomputer'):admin
Email address:
Password:
Password (again):
Superuser created successfully.
  1. 向管理网站注册模型。
  2. 现在,使用超级用户账户访问管理网站:http://localhost:8000/admin/,并输入你刚创建的超级用户的用户名和密码,弹出如下图所示,从中可以看出,这里还包含有Django框架内置的几个数据模型。Django框架中的管理员用户和密码就是保存在Users表中的。
    在这里插入图片描述

6.2 生成数据库数据

在这里插入图片描述

D:\python例题源代码\ch15code\blog>python manage.py shell
In [1]: from Account.models import Account

In [2]: ac = Account(username="user2",password="user2123456")

In [3]: ac.save()

In [4]: ac_list = Account.object.all()

In [5]: print(ac_list)
<QuerySet[<Account:Account object (1)>]>

6.3 Session功能

因为HTTP是无状态的协议,所以当需要在多个连接之间保持状态,可以使用Session。

# setting.py
INSTALLED_APPS = [
    # 部分代码省略
    'django.contrib.sessions'
]

MIDDLEWARE = [
    # 部分代码省略
    'django.contrib.sessions.middleware.SessionMiddleware',
]

<!--在templates文件夹下的login.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
</head>
<body>
    {% if not username %}
    <form method="post" action="/login/">
        {%csrf_token%}
        Username:<input type="text" name="username" value=""><br/>
        Password:<input type="password" name="password" value="">
        <input type="submit" value="Login">
    </form>
    {% else %}
    {{ username }} is log out!<br/>
    <form method="post" action="/logout/">
        {%csrf_token%}
        <input type="submit" value="Logout">
    </form>
    {% endif %}
</body>
</html>
# 在Account文件夹下的views.py

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from Account.models import Account

@csrf_exempt
def login(request):     # 登陆操作
    username = request.POST.get('username', None)
    password = request.POST.get('password', None)

    if username:
        ac_list = Account.objects.all()     # 获取数据库中的数据
        for ac in ac_list:
            if ac.username == username and ac.password == password:
                request.session['username'] = username
                return render(request, 'login.html', {'username': username})

    return render(request, 'login.html')

def logout(request):        # 登出操作
    try:
        del request.session['username']
    except KeyError:
        pass
    return HttpResponseRedirect("/login/")
# 在Account文件下的urls.py
from django.urls import path
from .import views

urlpatterns = [
    path('index/', views.index),
    path('random_number/', views.random_number),
    path('login/', views.login),
    path('logout/', views.logout)
]
# 在blog文件下的urls.py
from django.contrib import admin
from django.urls import path, re_path
from Account.views import random_number
from Account.views import index
from Account.views import login
from Account.views import logout

urlpatterns = [
    path('admin/', admin.site.urls),    # 管理界面
    path('index/', index),
    path('Account/random_number/', random_number),
    path('login/', login),
    path('logout/', logout)
]

在这里插入图片描述
在这里插入图片描述

七、习题

习题:

  1. 怎么理解MVC?怎么理解Django的MVT?
  2. 分别描述Django中的模型、视图和模板的作用以及相互之间的关系。
  3. 访问http://docs.jinkan.org/docs/flask/,根据相关文档完成Flask应用。

答案:

  1. MVC是一种在软件工程中广泛使用的设计模式。MVC模式将一个应用分为3个层次:模型层次、视图层次和控制层次。通过这种分层的方式,设计模式可以将应用的输入处理、界面显示以及控制流程分开。
    Django的MVT模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同
  2. Django的MTV模式按照下面这样分层。
    • M代表模型:负责业务对象和数据库的关系映射。与MVC中的M功能相同。
    • V代表视图:负责业务逻辑,并在适当的时候调用Model和Template。与MVC中的功能相同。
    • T代表模板:负责如何把页面展示给用户。与MVC中的V功能相同。
      除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。
      MVT模式的一般流程是:用户通过浏览器向服务器发起一个请求,这个请求回去访问视图函数,如果不涉及数据调用,那么这时视图函数返回一个模板也就是一个页面给用户,视图函数调用模型,模型去数据库里查找数据,然后逐级返回,视图函数把返回的数据填充到模板中,最后把页面展示给用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值