精通django 第二章 视图和URL

第一个Django驱动的页面:hello world
2.1.1第一个视图
  • 视图就是普通的python函数,第一个参数是HeepRequest对象,返回值是一个HttpResponse实例
  • 在mysite目录中新建views.py空文件
  • 里面内容如下
python 复制代码
# -*- encoding: utf-8 -*-
from django.http import HttpResponse
# 从django.http模块中导入HttpResponse类
def hello(request):
    return HttpResponse("Hello world")
2.1.2 第一个URL配置
  • urls.py配置如下

    from django.contrib import admin
    from django.urls import path
    from mysite.views import hello
    urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello),
    ]

2.1.6 Django 处理请求的过程
  • 运行python manage.py runserver命令时,manage.py脚本在内层mysite目录中寻找名为settings.py的文件。这个文件中保存着当前Django项目的全部配置,
    • 其中最重要的是ROOT_URLCONF, 它告诉Django网站的URL配置
  • 请求一个web请求的流程
    • 请求/hello/
    • Django查看ROOT_URLCONF设置,找到根URL配置
    • Django比较URL配置中的各个URL模式,找到与/hello/匹配的那个
    • 如果找到匹配的模式,调用对应的视图函数
    • 视图函数返回一个HTTPResponse对象
    • Django把HTTPResponse对象转换成正确的HTTP响应,得到网页
2.2 第二个视图:动态内容
  • 刚才的hello world是静态的html,现在来个动态的

  • views.py

python 复制代码
# -*- encoding: utf-8 -*-
from django.http import HttpResponse
# 从django.http模块中导入HttpResponse类
import datetime
def hello(request):
    return HttpResponse("Hello world")

def current_datetime(request):
    now = datetime.datetime.now()
    html = "It is now %s. "%now
    return HttpResponse(html)
  • urls.py
python 复制代码
from django.contrib import admin
from django.urls import path
from mysite.views import hello, current_datetime
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello),
    path('time/', current_datetime),
]
URL 配置和松耦合
  • 在Django Web应用中,URL定义与所调用的视图函数之间是松耦合的,即某个功能使用哪个URL与视图函数的实现本身放在两个地方
第三个视图:动态URL
  • 需求:通过/time/plus/22/ 等访问当前时间22个小时后的时间
  • views.py里面增加hours_ahead函数
python 复制代码
def hours_ahead(request, offset):
    '''
    :param request:
    :param offset: 是URL模式中那对圆括号捕获的字符串,注意捕获的是Unicode对象
    :return:
    '''
    try:
        offset = int(offset)
    except ValueError:
        raise Http404
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "In %s hour(s), it will be %s."%(offset, dt)
    return HttpResponse(html)
  • urls.py

    from django.contrib import admin
    from django.urls import path, re_path
    from mysite.views import hello, current_datetime, hours_ahead
    urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello),
    path('time/', current_datetime),
    re_path('time/plus/(\d{1,2})/$', hours_ahead),
    ]

2.5 Django精美的错误页面
相关推荐
摇滚侠17 小时前
两句话理解 ElasticSearch 搜索引擎数据库的作用
数据库·mysql·搜索引擎
BinaryBoss17 小时前
Python mongodb批量修改数据库某个字段
数据库·python·mongodb
Yu_iChan18 小时前
苍穹外卖Day09 地址簿模块
java·数据库·mybatis
戴西软件18 小时前
戴西发布 DLM许可证加密防护软件V4.2让工业软件授权迈入并发调度与精细治理时代
运维·服务器·网络·数据库·人工智能·安全·云计算
NineData18 小时前
NineData云原生智能数据管理平台新功能发布|2025年12月版
数据库·云原生·数据库管理工具·ninedata·数据库迁移·数据库迁移工具·智能数据管理平台
2501_941805931 天前
在大阪智能零售场景中构建支付实时处理与高并发顾客行为分析平台的工程设计实践经验分享
数据库
李慕婉学姐1 天前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
珠海西格电力1 天前
零碳园区有哪些政策支持?
大数据·数据库·人工智能·物联网·能源
数据大魔方1 天前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富