Django_1

Django_1

基于python的web框架中django都排在第一位,说明该框架在python中的地位。

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。

  • M 模型层(Model)负责与数据库交互
  • T 模版层(Template)负责呈现内容到浏览器
  • V 视图层(View)负责接收请求,获取数据,返回结果

MTV的数据流向大致是这样的

image-20230718160237493
1.创建django站点
django-admin startproject 站点名

image-20230718162044346
2.在新建的站点下创建业务模块,即在myblog路径下
djangoProject\myblog> python manage.py startapp travel
djangoProject\myblog> python manage.py startapp book
jangoProject\myblog> python manage.py startapp data

image-20230718162630318

修改核心子模块目录下的setting.py文件,在INSTALLED_APPS列表里添加刚创建的业务名称,即book、data、travel

3.数据库迁移

注意配置setting.py里的数据库信息

python manage.py migrate 
4.测试web服务,注意是在站点目录下运行
python manage.py runserver
5.设定访问路由

此时主要使用三个文件,一个是myblog核心子模块里的urls.py全局路由文件,一个是业务模块如book里的urls.py局部路由文件,一个是业务模块如book里的views.py视图设置文件。

book的局部路由:

from django.urls import path  # 导入路径相关配置
from . import views  # 导入视图views
urlpatterns = [
    path('', views.index, name="index"),  # 默认访问book业务的首页
    path('sell/', views.sell, name="sell")  # 添加一个sell子页面路径,访问views里的sell函数
]

book的views视图文件:

from django.shortcuts import render
from django.http import HttpResponse
def index(request):
    msg = "welcome to visit Dr.Cao's blog,2020!"
    return HttpResponse(msg)
def sell(request):  # 增加的sell函数
    msg = {}  # 定义了一个字典
    msg['data'] = "你在访问曹鉴华的售书页面"  # 设置了键名为data,值为后面的语句
    return render(request, 'index.html', msg)  # 使用render渲染方式

这样业务模块里的简单路由就设定好了,最后一步还需要回到核心子模块里的全局路由设定urls.py文件里,将业务模块添加进去:

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('book.urls'))  # 使用include函数,book.urls为业务模块里的urls包
]

操作成功,运行可得

image-20230718214738647

运行错误

'DIRS': [BASE_DIR + "templates", ], # 其中的BASE_DIR为项目根目录路径 TypeError: unsupported operand type(s) for +: 'WindowsPath' and 'str'

  • 第一种解决方法:
7ccc8e3371ee493f604a6dd77643fed
第二种解决方法

这个错误提示表明在拼接BASE_DIR和"templates"时,出现了不支持的操作类型错误。BASE_DIR的类型是WindowsPath,而"templates"是字符串类型str,无法直接进行拼接操作。

要解决这个问题,你可以使用os.path模块中的函数来拼接路径,如下所示:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES_DIR = os.path.join(BASE_DIR, "templates")

# 在TEMPLATES设置中使用TEMPLATES_DIR
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [TEMPLATES_DIR, ],
        'APP_DIRS': True,
        # ...
    },
    # ...
]

原文链接:https://zhuanlan.zhihu.com/p/147462438

posted @ 2023-07-18 23:59  燕妮wyn  阅读(22)  评论(0)    收藏  举报