Django快速入门: 前台管理
目录
第一步::URLconf 路由管理
在 Django 中,定义 URLconf 包括正则表达式、视图两部分 。
- Django 使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图 。
- 注意:只匹配路径部分,即除去域名、参数后的字符串 。
- 在主配置文件中添加子配置文件,使主 urlconf 配置连接到子模块的 urlconf 配置文件 。
主配置文件配置如下, 已经配置过, 可以忽略此步骤:
from django.contrib import admin
from django.urls import path, include
from bookApp.views import index
urlpatterns = [
path('admin/', admin.site.urls),
# 当用户请求路径为/book/时,访问bookApp/urls.py子路由配置文件
path('book/', include('bookApp.urls')),
]
bookApp 子应用的子配置文件如下:
from django.urls import path
from bookApp import views
urlpatterns = [
# 当用户访问路径是book/, 执行views.index视图函数。
path(r'', views.index, name='index'),
# 显示书籍的详情页, 接收一个int值并赋值给id
path(r'<int:id>/', views.detail, name='detail'),
]
第二步:视图函数处理业务逻辑
在 Django 中,视图对WEB请求进行回应( response )。
- 视图接收 reqeust 请求对象作为第一个参数,包含了请求的信息 。
- 视图函数就是一个Python函数,被定义在 views.py 中 。
- 定义完成视图后,需要配置 urlconf ,否则无法处理请求。
bookApp/views.py 内容:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
# 视图: 对用户的请求(request)进行业务逻辑操作,最终返回给用户一个响应(response).
from bookApp.models import Book, Hero
def index(request):
# print("用户请求的路径:",request.path)
books = Book.objects.all()
# 返回响应信息
# return HttpResponse(books)
# 渲染: 将上下文context{'books': books}填充到book/index.html代码的过程。
return render(request, 'book/index.html', {'books': books})
def detail(request, id):
"""书籍详情页信息"""
book = Book.objects.filter(id=id).first()
heros = book.hero_set.all()
return render(request, 'book/detail.html',
{'book': book, 'heros': heros})
第三步:模板管理实现好看的HTML页面
作为Web 框架, Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。 模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。
(1)模板引擎配置
创建模板的目录如下图:
在 BookManage/settings.py 文件中,默认设置了 TEMPLATES 的 DIRS 值:
(2)模板语法: 变量
变量输出语法
当模版引擎遇到一个变量,将计算这个变量,然后将结果输出。
变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
当模版引擎遇到点("."),会按照下列顺序查询:
- 字典查询,例如: foo["bar"]
- 属性或方法查询,例如: foo.bar
- 数字索引查询,例如: foo[bar]
- 如果变量不存在, 模版系统将插入'' (空字符串)。
(3)模板语法: 常用标签
语法
{ % tag % }
作用
在输出中创建文本。
控制循环或逻辑。
加载外部信息到模板中。
for标签
{% for ... in ... %}
循环逻辑
{% endfor %}
if标签
{% if ... %}
逻辑1
{% elif ... %}
逻辑2
{% else %}
逻辑3
{% endif %}
comment标签
{% comment %}
多行注释
{% endcomment %}
include标签
加载模板并以标签内的参数渲染
{% include "base/left.html" %}
url :反向解析
{% url 'name' p1 p2 %}
csrf_token 标签
用于跨站请求伪造保护
{% csrf_token %}
(4)主页与详情页前端HTML设计
定义 **index.html** 模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 style="color: #00e39a">图书管理系统</h1>
<ul>
{% for book in books %}
<li><a href="/book/{{ book.id }}/">{{ book.name }}</a></li>
{% endfor %}
</ul>
</body>
</html>
定义 **detail.html** 模板
在模板中访问对象成员时,都以属性的方式访问,即方法也不能加括号
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ book.name }}</h1>
<h1>{{ book.pub_date }}</h1>
<h1>{{ heros }}</h1>
</body>
</html>
访问链接, 测试运行是否成功:
http://127.0.0.1:8080/book/