Python框架篇之Django(路由系统URL、视图函数views)

一、路由系统(URL)

1、URL配置 (URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。
简单来说,我们就是用这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

urlpatterns = [
    url(正则表达式, views视图函数,参数,别名),
]
  • 正则表达式:url路径的正则
  • views视图函数:通常为一个视图函数或一个指定视图函数路径的字符串
  • 参数:可选的要传递给视图函数的默认参数(字典形式)
  • 别名:可选的name参数,其他地方调用都是用的别名

2、例如:

from django.conf.urls import url
from . import views
  
urlpatterns = [
    url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {
    
    'jiu': 'ok'}),
]

3、无名分组

	url('article/(\d{4})/(\d{2})', views.article_year),
    # 表示article后可匹配任意4个数字,都能打开该页面
    # 加()将正则内容分组,就可以获取到对应的值了,就是说页面的网址也会跟着变成输入的那4个数字
    # 简单来说就是一个分组会对应article_year函数的一个参数

4、有名分组

# 有名分组:分别起名为year和month,这样对应的形参也必须同名
    url(r'article/(?P<year>\d{4})/(?P<month>\d{2})', views.article_year),
    url(r'register/', views.register, name="reg"),  # reg是这个地址的别名,在其他文件里都可以使用

5、路由分发(include)

# 自动路由分发,要导入include
    path('blog/', include('blog.urls')),
    # 名字为urls,因此需要在blog目录下建立一个urls文件,将这些需要分发到一堆的路径都粘贴进去
    # 意思就是以blog开头的内容,全都到blog.urls里面去找

11

二、视图函数(views)

1、http请求 中产生两个核心对象:

  • http请求:HttpRequest对象
  • http响应:HttpResponse对象

2、HttpRequest(请求)的属性和方法

  • path:请求页面的全路径,不包括域名
  • method: 请求中使用的HTTP方法的字符串表示。全大写表示
if  req.method=="GET":
	do_something()
	elseif req.method=="POST":
	do_something_else()
  • GET: 包含所有HTTP GET参数的类字典对象
  • POST: 包含所有HTTP POST参数的类字典对象
    服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过

HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
if req.POST来判断是否使用了HTTP POST 方法;应该使用 if req.method==“POST”

  • COOKIES:包含所有cookies的标准Python字典对象;keys和values都是字符串
  • FILES:包含所有上传文件的类字典对象,FILES中的每一个Key都是标签中的
    (1)filename: 上传文件名,用字符串表示
    (2)content_type: 上传文件的Content Type
    (3)content: 上传文件的原始内容
  • user:代表当前登陆的用户
  • session:唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用
  • request.POST.getlist(’’):常用获取内容的方法

3、HttpResponse(响应)
对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。
每个view请求处理方法必须返回一个HttpResponse对象,HttpResponse类在django.http.HttpResponse中。

  • 页面渲染:render(常用)、render_to_response(少用)
	return render(req, "index.html", locals())
    # 参数:请求对象,要返回的页面,返回前端的全部键值对——这里表示{"time":t}
  • 页面跳转:redirect(“路径”)
		user = req.POST.get("user")
        if user=="zahuw":
            return redirect("/login/")
        # 就相当于是http://127.0.0.1:8080/login/
        # 若改成:return redirect("login.html")
        # 这样跳转到页面url不会变,仍然是原来的url,一刷新就回到原来的页面了
  • 将函数中所有的变量传给模板:locals()
	# return render(req,"index.html",{"action":li,"d":dic,"c":ani})  # 手动列出来
    return render(req,"index.html",locals())  # 全部获取

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/106969476