python中的Django框架(3)(Django框架创建图书管理系统项目的前台管理)

第一步: URLconf 路由管理

在 Django 中,定义 URLconf 包括正则表达式、视图两部分 。

Django 使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图 。

注意:只匹配路径部分,即除去域名、参数后的字符串 。

在主配置文件中添加子配置文件,使主 urlconf 配置连接到子模块的 urlconf 配置文件 。

 

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')



]

 

第二步:视图函数处理业务逻辑

在 Django 中,视图对WEB请求进行回应( response )。

视图接收 reqeust 请求对象作为第一个参数,包含了请求的信息 。

视图函数就是一个Python函数,被定义在 views.py 中 。

定义完成视图后,需要配置 urlconf ,否则无法处理请求。

 

编辑bookapp/views.py

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)

 

 

第三步:模板管理实现好看的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

detail.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>

 

index.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>

此时访问http://127.0.0.1:8000/book/,所有图书已变为连接,点进去即可查看书籍具体信息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值