Django_1
Django_1
基于python的web框架中django都排在第一位,说明该框架在python中的地位。
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
- M 模型层(Model)负责与数据库交互
- T 模版层(Template)负责呈现内容到浏览器
- V 视图层(View)负责接收请求,获取数据,返回结果
MTV的数据流向大致是这样的
1.创建django站点
django-admin startproject 站点名
2.在新建的站点下创建业务模块,即在myblog路径下
djangoProject\myblog> python manage.py startapp travel
djangoProject\myblog> python manage.py startapp book
jangoProject\myblog> python manage.py startapp data
修改核心子模块目录下的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包
]
操作成功,运行可得
运行错误
'DIRS': [BASE_DIR + "templates", ], # 其中的BASE_DIR为项目根目录路径 TypeError: unsupported operand type(s) for +: 'WindowsPath' and 'str'
-
第一种解决方法:
第二种解决方法
这个错误提示表明在拼接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,
# ...
},
# ...
]

浙公网安备 33010602011771号