Django模版语言&请求与响应

template模版

编写url和视图文件

#urls.py
path('user/',views.user)

#views.py
def user(request):
    return render(request,"user_list.html")

app目录中创建templates目录,templates中放入html文件
浏览器访问user路径返回写好的user_list.html

在这里插入图片描述

静态文件

在开发过程中

  • 图片
  • css
  • js

都会当做静态文件处理

static目录

在app目录下创建static文件夹,static文件夹下创建css、js、img

在这里插入图片描述

引用静态文件

{% load static %}
<img src="{% static '路径' %}">
<script src="{% static '路径' %}">

Django模版语法

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理

在这里插入图片描述
视图函数的render内部
1.读取含有模版语法的HTML文件
2.内部进行渲染(模版语法执行并替换数据) 最终得到,只包含HTML标签的字符串
3.将渲染(替换)完成的字符串返还给用户浏览器

#tpl.html
<body>
<h1>模版语法</h1>
<div>{{ n1 }}</div>
<div>{{ n2 }}</div>
</body>
def tpl(request):
    name = "张三"
    roles = ["管理员","CEO","保安"]
    return render(request,'tpl.html',{"n1":name, "n2":roles})

在这里插入图片描述

使用列表的索引

<body>
<h1>模版语法</h1>
<div>{{ n1 }}</div>
<div>{{ n2.0 }}</div>
<div>{{ n2.1 }}</div>
<div>{{ n2.2 }}</div>
</body>

在这里插入图片描述

字典

<div>{{ n3 }}</div>
<div>{{ n3.name }}</div>
<div>{{ n3.salary }}</div>
<div>{{ n3.role }}</div>
def tpl(request):
    name = "张三"
    roles = ["管理员","CEO","保安"]
    user_info = {"name":"王二","salary":1000,"role":"CTO"}
    return render(request,'tpl.html',{"n1":name, "n2":roles, "n3":user_info})

在这里插入图片描述

遍历字典

<ul>
    {% for item in n3.keys %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>
<ul>
    {% for item in n3.values %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>
<ul>
    {% for k,v in n3.items %}
        <li>{{ k }} = {{ v }}</li>
    {% endfor %}
</ul>

在这里插入图片描述

列表中套字典

data_list = [
    {"name": "王二", "salary": 1000, "role": "CTO"},
    {"name": "张三", "salary": 20000, "role": "狗不是"},
    {"name": "李四", "salary": 800000, "role": "CEO"},
]
<div>{{ n4.1 }}</div>
<div>{{ n4.1.name }}</div>
<div>{{ n4.1.role }}</div>
{% for item in n4 %}
    <div>{{ item.name }} {{ item.salary }}</div>
{% endfor %}

在这里插入图片描述

if语句

和for语句差不多

{% if n1 == "张三" %}
    <h1>哒哒哒</h1>
{% else %}
    <h1>嘟嘟嘟</h1>
{% endif %}
#输出哒哒哒

实例

定义一些新闻,通过网络请求去获取新闻,就拿移动新闻中心获取

在这里插入图片描述

抓包获取url

在这里插入图片描述
获取json数据,这是字典包含字典包含列表,新闻的标题在list列表中
新创建一个news的html页面并补充url和视图文件函数
通过requests库获取数据

def news(request):
    re = requests.get("http://www.10086.cn/aboutus/news/groupnews/5018449_5585_11769.json?nowtime=1644212042955")
    data_list = re.json()
    new = data_list['cData']['list']

    return render(request,'news.html',{"new_list":new})
<body>
    <h1>移动新闻中心</h1>
    <ul>
        {% for item in new_list %}
            <li>{{ item.mainTitle }} 时间:{{ item.publishTime }}</li>
        {% endfor %}
    </ul>
</body>

在这里插入图片描述

请求和响应

请求

# 1.获取请求方式 GET/POST
print(request.method)

# 2.在URL上传递值
print(request.GET)

# 3.在请求体中提交数据
print(request.POST)

响应

# 1.[响应]HttpResponse,内容字符串内容返回给请求者
return HttpResponse("返回内容")

# 2.[响应]读取HTML的内容 + 渲染(替换) -> 字符串,返回给用户浏览器
return render(request,'something.html',{"title":"来了"})

# 3.[响应]让浏览器重定向到其他的页面
return redirect("http://www.baidu.com")

get方式请求传递数据 post方式同理

在这里插入图片描述

在这里插入图片描述

实例

写一个简易的用户登陆

def login(request):
    if request.method == "GET":
        return render(request,"login.html")
    else:
        username = request.POST.get("user")
        password = request.POST.get("pwd")
        if username == "root" and password == "123":
            return redirect("http://www.baidu.com")
        else:
            return render(request,'login.html',{"error_msg":"用户名或密码错误"})

这个{% csrf_token %}需要特别注意,不写Django会报错,csrftoken的目的是为了进行校验

<body>
<h1>用户登陆</h1>
<form method="post" action="/login/">
    {% csrf_token %}
    <input type="text" name="user" placeholder="用户名">
    <input type="text" name="pwd" placeholder="密码">
    <input type="submit" value="提交"/>
    <span>{{ error_msg }}</span>
</form>
</body>

在这里插入图片描述

用户名密码正确跳转百度,这是最简易的用户登陆与真正的项目还相差很远,因为将逻辑写死了。这个主要为了跟好的了解Django中的请求与响应。

人生漫漫其修远兮,网安无止境。
一同前行,加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值