Python Django(二)—— 项目结构、配置简介、路由与视图函数

       本文截图来自b站视频课程,个人觉得讲得挺清晰的,适合小白快速入门。另外还有一些自己的笔记和做的里面题目之类的,都放在一起了。2021最新版Django全套视频(django框架快速上手)_Python全栈_哔哩哔哩_bilibili

官方文档

  • https://docs.djangoproject.com/en/2.2/
  • 中文版 https://docs.djangoproject.com/zh-hans/2.2/

一、 项目结构

二、 配置文件

配置项名一定要大写

       如果以调试模式运行,一是报错日志量太大,二是会暴露很多代码信息,因此不能用于生产环境。例如随便输一个不存在的网址

这个时区一般要改

三、 URL和视图函数

例如

Django如何处理URL的请求

匹配只关注端口/后面的部分(蓝色部分,不包括/)

四、 视图函数

五、 路由配置 path

Name主要是地址特别复杂时,用别名简化

1. 小练习1

① 首先修改路由文件 urls.py ,匹配对应字符及对应views函数

urlpatterns = [
    # 默认的,不用管它
    path('admin/', admin.site.urls),
    # 首页,匹配 http://127.0.0.1:8000,空字符串就表示8000后什么都不加
    path('', views.home_view),
    # 第1页,匹配 http://127.0.0.1:8000/page/1
    path('page/1', views.page1_view),
    # 第2页,匹配 http://127.0.0.1:8000/page/2
    path('page/2', views.page2_view)
]

  • ② 建一个views文件,在里面创建3个对应的函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@Time  : 2022/6/4 14:33
#@File  : views.py

from django.http import HttpResponse

# 主页对应视图函数
def home_view(request):
    html = "这是我的首页"
    return HttpResponse(html)

# 第1页对应视图函数
def page1_view(request):
    html = "这是编号为1的网页"
    return HttpResponse(html)

# 第2页对应视图函数
def page2_view(request):
    html = "这是编号为2的网页"
    return HttpResponse(html)

③ 启动项目

python manage.py runserver

简单测试一下

2. 小练习2

业务中一般比较常用str和int

将前面案例的页数改为path转换器实现:

① 路由规则 urls.py

urlpatterns = [
    # 匹配任意页数,例如 http://127.0.0.1:8000/page/200
    path('page/<int:page_num>', views.page_num_view)
]

② 视图函数

# 任意页数对应视图函数,加了一个page_num的参数

def page_num_view(request,page_num):
    html = "这是编号为 %s 的网页" % page_num
    return HttpResponse(html)
 

③ 保存,不用重启项目,立即会生效

3. 小练习3

核心在于这个路由规则:整数/字符串[add/sub/mul]/整数

① 加一条路由规则,需要3个参数

path('<int:num_1>/<str:opt>/<int:num_2>', views.calculate_view)

② 视图函数

# 小计算器
def calculate_view(request,num_1,opt,num_2):
    if (opt == 'add'):
        result = num_1 + num_2
    elif (opt == 'sub'):
        result = num_1 - num_2
    elif (opt == 'mul'):
        result = num_1 * num_2
    else:
        result = '抱歉,暂不支持该运算类型'
    html = "计算结果是: %s " % result
    return HttpResponse(html)
 

测试执行

六、 路由配置 re_path

1. 小练习4

修改一下上面的案例,只能计算不超过2位的整数,3位以上只取前两位

urls.py文件

① 先要引入re_path模块

from django.urls import path,re_path

② 配置路由规则

# 小计算器,http://127.0.0.1:8000/整数/字符串[add/sub/mul]/整数
# 这次整数部分不能超过2位,例如  http://127.0.0.1:8000/10/add/20
re_path(r'^(?P<num_1>\d{1,2})/(?P<opt>\w+)/(?P<num_2>\d{1,2})$', views.calculate_view)

解释一下这个含义:

  • re_path(r'') 表示这是个正则表达式,^...$表示以什么开头和结束
  • 里面还是3个参数,用/分隔
  • (?P<num_1>\d{1,2}) :(?P<变量名>\匹配模式),3个变量名分别为num_1,opt,num_2
  • d{1,2} 匹配 1或2位整数,w+ 匹配至少1位数字或字符

       注意这个路由规则不能写到原先那条下面,因为一旦匹配到就停了。所以要么删掉之前那条,要么放到它上面。

       calculate_view函数不用动,因为逻辑没有变。

跑一下

奇怪的结果出现了。。。可以猜到它应该是把20和10当成了字符串,我们再试试sub

这个报错就很明显了

2. 修正小练习

     所以正则表达式匹配后返回的确实是字符串,需要我们在calculate_view函数里给它转一下。

def calculate_view(request,num_1,opt,num_2):
    num_1 = int(num_1)
    num_2 = int(num_2)

后面都一样

       网上好多文章包括这个视频教程都只是print一下,并不能直接看出类型,所以还是得自己动手试试。

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值