Django基础知识点一:视图和URL配置

一,创建视图文件

概要:页面的内容是靠view function(视图函数)产生,URL定义在URLconf中

视图:约定俗称用 view.py 命名, views.py 在项目目录下,建立后的目录应该为:

输出hello world 视图demo

from django.http import HttpResponse

def hello(request):
	return HttpResponse('hello world')

代码解析:

1,从  django.http 模块导入(import)  HttpResponse 类。
2,定义一个叫做 hello 的视图函数。每个视图函数至少要有一个参数,通常被叫作 request 。 这是一个触发这个视图、包含当前Web请求信息的对象,是类 django.http.HttpRequest 的一个实例。在这个示例中,我们虽然不用 request 做任何事情,然
而它仍必须是这个视图的第一个参数
。注意视图函数的名称并不重要;并不一定非得以某种特定的方式命名才能让 Django 识别它。 

总结: 一个视图就是Python的一个函数。这个函数第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。为了使一个Python的函数成为一个Django可识别的视图,它必须满足这两个条件。

二,绑定视图文件使之能够被访问

现在运行 python manage.py runserver 发现刚那个hello world 并没有返回,是因为我们没有对视图进行URL绑定。要能访问,则需要配置URLconf

URLconf 就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表

当前目录在django -admin startproject的时候已经在项目目录下自动创建了urls.py,配置:

from django.conf.urls import url
from django.contrib import admin
from . import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/$', views.hello),
    url(r'^times/', views.current_datetime),
]

配置说明:

1,import  视图

2,在urlpatterns 新增配置: (‘^hello/$’, view.hello), 这行被称作URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数

知识扩展:

1,Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。 这意味着我们为/hello/写URL模式不用包含斜杠(/)

2,模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特定的含义: 上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。

3,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。(如果所有URL都以’/’结尾的(Django开发者的偏爱),只需要在每个URL后添加斜杠,并且设置”APPEND_SLASH”为”True”. 如果不喜欢URL以斜杠结尾或者根据每个URL来决定,那么需要设置”APPEND_SLASH”为”False”,)

4,hello视图函数作为一个对象传递,而不是调用它。 这是 Python (及其它动态语言的) 的一个重要特性: 函数是一级对象(first-class objects), 也就是说你可以像传递其它变量一样传递它们。

5,正则匹配URL扩展:

三,运行

从项目manage.py 所在目录cmd :python manage.py runserver 进行运行:返回127.0.0.1:8000

四,动态内容,动态URL扩展:

1,动态内容:

动态显示当前时间:

from django.http import HttpResponse
import datetime

def hello(request):
	return HttpResponse('hello world')

def current_datetime(request):
	now = datetime.datetime.now()
	html = "now %s" % now
	return HttpResponse(html)

URLconf上一步已经多写了一个time的路由,不断刷新127.0.0.1:8000/tiems 会不断显示当前时间

知识扩展:

1,字符串中的%s是占位符,字符串后面的百分号表示用它后面的变量now的值来代替%s。变量%s是一个
datetime.datetime对象。它虽然不是一个字符串,但是%s(格式化字符串)会把它转换成字符串

2,setting 时区和语言设置:LANGUAGE_CODE = 'zh-hans' ,TIME_ZONE = 'Asia/Shanghai'

3,动态接收参数显示不同页面:url 通配符配置:

from django.conf.urls import url
from django.contrib import admin
from . import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/$', views.hello),
    url(r'^times/', views.current_datetime),
    url(r'^art_list/art/(\d{1,2})/$', views.art_list),
]

视图:

from django.http import Http404,HttpResponse
import datetime

def hello(request):
	return HttpResponse('hello world')

def current_datetime(request):
	now = datetime.datetime.now()
	html = "now %s" % now
	return HttpResponse(html)

def art_list(request,art_id):
	try:
		art_id = int(art_id)
	except ValueError:
		raise Http404()
	dt = datetime.datetime.now() + datetime.timedelta(hours=art_id)
	html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (art_id, dt)
	return HttpResponse(html)

运行:python manage.py runserver,即可看到运行成功

注意点:

1,捕获值永远都是字符串(string)类型,而不会是整数(integer)类型,即使这个字符串全由数字构成(如:“21”)

2,如果在一个不能转换成整数类型的值上调用int(),Python将抛出一个ValueError异常

3,每一个视图  总是以一个  HttpRequest 对象作为 它的第一个参数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值