Django 之必知必会三板斧

一、HttpResponse


在django.http 模块中定义了HttpResponse 对象的API,HttpRequest 对象由Django 自动创建,不调用模板,直接返回数据。

1 在 app/views.py 中导入模块,添加对应的函数

from django.shortcuts import HttpResponse, render, redirect

# Create your views here.

def index(request):

    return HttpResponse("index page")

2 在 mysite/urls.py 中导入存放视图函数的py文件

from django.contrib import admin
from django.urls import path
from app import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'index/', views.index) # 路由与视图函数对应关系
]

3 启动项目

python manage.py runserver

 

二、redirect


1 redirect 重定向,重定向到本地html 页面或者其他的网页,打开之后会自动跳转。

2 还可以写别名,别名需要参数的话,就必须使用reverse 解析。

from django.shortcuts import HttpResponse, render, redirect

# Create your views here.

def index(request):
    
    # return redirect('http://www.baidu.com')
    # return redirect('/home/')
    return redirect('home')    # 别名方式

def home(request):
    return HttpResponse('home page')

3 在 mysite/urls.py

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'index/', views.index), # 路由与视图函数对应关系
    path(r'home/', views.home, name = 'home')
]

 

三、render


返回html 页面,并且返回给浏览器之前还可以给html 文件传值

1 render 返回一个html 页面

from django.shortcuts import HttpResponse, render, redirect

# Create your views here.

def index(request):
    """
    :param request: 请求相关的所有数据对象
    """
    # return render(request, 'index.html')
    
    data = "iyuyixyz"
    # 将数据对象展示到页面上
    return render(request, 'index.html', locals())

2 进入templates 文件夹下创建一个 templates/index.html 页面,并写入内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h3>index page</h3>
    <h3>{{data}}</h3>
</body>
</html>

视图函数必须要返回一个HttpResponse对象,研究三者的源码即可得处结论。

The view app.views.index didn't return an HttpResponse object. It returned None instead.

render 简单内部原理

from django.template import Template, Context
def index(request):
    res = Template('<h1>{{ info }}</h1>')
    context = Context({'info': {'nickname':'iyuyixyz', 'email':'iyuyi.xyz@gmail.com'}})
    result = res.render(context)
    print(result)
    return HttpResponse(result)

 

posted @ 2022-09-07 01:55  娇小赤雅  阅读(69)  评论(0编辑  收藏  举报