Linux自动化运维——Python(16)(Django框架创建图书管理系统项目的前台管理及项目总体流程详解 )

 

Django框架创建图书管理系统项目的前台管理及项目总体流程详解

一.前台管理

1.URL 路由的管理

在Django 中,定义URLconf 包括正则表达式、视图两部分 。Django 使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图 。注意:只匹配路径部分,即除去域名、参数后的字符串 。在主配置文件中添加子配置文件,使主urlconf 配置连接到子模块的urlconf 配置文件 。

主配置文件配置如下, 已经配置过BookManage/urls.py, 可以忽略此步骤:  

bookApp 子应用的子配置文件bookApp/urls.py如下:

from django.contrib import admin
from django.urls import path, re_path
# .代表当前目录, 从当前目录导入views模块
from . import  views

# 路由处理: 当客户端访问网址的时候, 交给哪一个函数去处理客户端的请求并返回响应。
urlpatterns = [
    # name='index'是给views.index起的一个别名,便于后续的处理
    path('', views.index, name='index'),
    # 设计访问书籍详情信息的url地址, 如下:
    # http://127.0.0.1:8000/book/1/
    # http://127.0.0.1:8000/book/2/
    # http://127.0.0.1:8000/book/3/
    # Django2中path的路由可以使用正则匹配, Django3中不能, 需要使用re_path
    # 正则的规则: [0-9]代表单个数字, \d也代表单个数字, +代表前面的字符出现1次或者多次.
    # 正则中的()代表分组,这里将()里面匹配到的内容传递给detail函数.
    # re_path('([0-9]+)/$', views.detail, name='detail'),
    # 注意: int代表整型, id代表将传入的整形数值存储到id变量中,传给视图函数
    path('<int:id>/', views.detail, name='detail')

]

2.视图函数处理业务逻辑

在Django 中,视图对WEB请求进行回应( response )。视图接收reqeust 请求对象作为第一个参数,包含了请求的信息 。视图函数就是一个Python函数,被定义在views.py 中 。定义完成视图后,需要配置urlconf ,否则无法处理请求。

from django.shortcuts import render
from django.http import  HttpResponse
from .models import  Book

# Create your views here.
# 编写第一个视图函数, http协议(基于请求-响应的一个协议, request-response)
def index(request):
    return HttpResponse("图书管理系统")


def detail(request, id):
    """访问书籍详情信息的函数"""
    # 从Book书籍表中寻找id=1/2/3(url中需要查询的书籍id)的详细信息
    book = Book.objects.get(id=id)
    info = """
    书籍id: %s
    书籍名称: %s
    书籍发布日期:%s
    """ %(book.id, book.title, book.pub_date)
    # 视图函数,传入一个http请求,返回一个http响应
    return HttpResponse(info)

3.模板管理实现好看的HTML页面

作为Web 框架, Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。

(1) 模板引擎配置  在试图文件中添加相关图书的信息

from django.shortcuts import render
from django.http import HttpResponse
from .models import Book


# Create your views here.
# 编写第一个视图函数, http协议(基于请求-响应的一个协议, request-response)
def index(request):
    """书籍管理的首页, 显示所有的书籍信息"""
    # 查询数据库中所有的书籍信息
    books = Book.objects.all()
    # render租用/获取index.html的前端界面, 每次访问前端显示的信息不同, 取决于book书籍的信息
    return render(request, 'bookApp/index.html', {'books': books})
    # return HttpResponse("图书管理系统")


def detail(request, id):
    """访问书籍详情信息的函数"""
    # 从Book书籍表中寻找id=1/2/3(url中需要查询的书籍id)的详细信息
    book = Book.objects.get(id=id)
    # info = """
    # 书籍id: %s
    # 书籍名称: %s
    # 书籍发布日期:%s
    # """ %(book.id, book.title, book.pub_date)
    # # 视图函数,传入一个http请求,返回一个http响应
    # return HttpResponse(info)

    return render(request, 'bookApp/detail.html', {'book': book})

(2)编写HTML文件  在templates中建立detail.html      和  index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书详情页</title>
</head>
<body>
<h1>图书名称: {{ book.title }}</h1>
<h3>图书编号: {{ book.id }}</h3>
<h3>图书发布日期: {{ book.pub_date }}</h3>
<h3>图书人物信息: </h3>
{% if book.hero_set.all %}
    <ul>
    {% for hero in book.hero_set.all %}
        <li>{{ hero.name }}-{{ hero.content }}</li>
    {% endfor %}
    </ul>
{% else %}
    <h6 style="color: mediumvioletred">书籍{{ book.title }}没有人物信息</h6>
{% endif %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书管理系统</title>
</head>
<body>
<ul>
    {% for book in books %}
        <li><a href="/book/{{ book.id }}/">{{ book.id }}-{{ book.title }}</a></li>
    {% endfor %}
</ul>
</body>
</html>

Django请求的生命周期:wsgi : 封装请求后交给后端的web框架( Flask、Django )。
                                        请求中间件: 对请求进行校验或在请求对象中添加其他相关数据,例如: csrf、request.session 。
                                         路由匹配: 根据浏览器发送的不同url 去匹配不同的视图函数。
                                         视图函数: 在视图函数中进行业务逻辑的处理,可能涉及到: ORM、Templates 。
                                         响应中间件: 对响应的数据进行处理。
                                          wsgi : 将响应的内容发送给浏览器。

4.项目的总结

本系统基本功能已经完成, 前端页面可以搜索好看的html 进行替换。
安装配置django 运行的环境
编写模型,使用简单API 与数据库交互
使用Django 的后台管理中维护数据
通过视图接收请求,通过模型获取数据,展示出来
调用模板完成展示

5.流程总结

(1)客户端访问网址http://127.0.0.1:8000/book/1/,客户端向127.0.0.1发起了一个http请求

(2)服务器端要对于客户端的请求进行处理,访问的web程序是flask框架完成的,需要wsgi(web server gateway interface)帮我们处理客户端的请求

(3)项目启动时,pyhton manage.py 加载了一些信息(读取Django项目的配置文件,文件包含:路由配置文件位置,数据库存储位置,模版存储位置)

(4)访问路由配置文件Django2/urls.py     注意请求的路由是 /book/1

文件中有 path(book/",include('bookApp.urls'))  这个代码的表达的是 如果请求路径以book开头 则读取bookApp子应用里面的路由配置文件 

(5)读取bookApp子应用的配置文件 注意请求路由是 /book/1

path(’<int:id>/‘,views.detail,name='detail')   如果请求的路径满足条件 则执行视图函数view.detail 

(6)执行路由对应的视图函数

注意3点:(1)返回的是否是纯文本字符串 如果是 则把纯文本字符串作为响应返回给用户浏览器;

                 (2)是否需要对数据库进行查询 ? yes , Book.objects.get(id)==SQL通过面向对象的方式查询数据库的信息 真实是执行数                 据库sql语句的;

                  (3)判断是否前端显示? yes    前端展示的模版在哪  bookApp/detail.html

                   (4) 最终数据库查询到的书籍信息返回给模版文件(HTML文件),汇总之后(渲染)返回给用户浏览器

猜你喜欢

转载自blog.csdn.net/weixin_43215948/article/details/107553954
今日推荐