Django学习之预备知识

news/2025/2/19 10:12:35

七、Django学习之预备知识


其他关于Python Web开发笔记:(如果遇到问题可以一起交流~)

一、Flask学习之HTML-CSDN博客

二、Flask学习之CSS-CSDN博客

【接上篇】二、Flask学习之CSS(下篇)-CSDN博客

三、Flask学习之BootSrap-CSDN博客

四、Flask学习之JavaScript-CSDN博客

五、Flask学习之MySQL-CSDN博客

六、Django学习之小试牛刀-CSDN博客

1.模板语言

1.1. 准备工作

首先在urls.py添加学习模板语言的url:

python">path("tpl/", views.tpl)

然后在views.py里面添加对应的视图函数:

python">from django.shortcuts import render

def tpl(request):
    return render(request, "tpl.html")

最后在templates文件夹下创建对用的HTML文件tpl.html。

1.2. 显示变量

变量的形式如下:{{ variable }}。当模板引擎遇到一个变量时,它会评估该变量并将其替换为结果。变量名称由字母数字字符和下划线("_")的任意组合组成,但不能以下划线开头,也不能是数字。

例如将tpl函数改为:

python">def tpl(request):
    name = "panda"
    return render(request, "tpl.html", {"name": name})

然后将HTML文件改为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>模板语言学习</h1>
{{ name }}
</body>
</html>

运行结果:

在这里插入图片描述

由此也可以想到能够展示列表:

python">def tpl(request):
    name = "panda"
    my_list = ["apple", "banana", "cherry"]
    return render(request, "tpl.html", {"name": name, "my_list": my_list})

然后在HTML中加入:

{{ my_list }}

结果:

如果要提取列表中每一个变量不能使用Python中的[],要使用.

{{ my_list.1 }}

1.3. for循环

{% for each in my_list %}
    <div>
        {{ each }}
    </div>
{% endfor %}

效果:

image-20240128112553728

1.4. 条件语句

if语句:

{% if name == "panda" %}
    <div>{{ name }}</div>
{% endif %} 

if-else语句:

{% if name == "name" %}
    <div>
    {{ name }}
    </div>
{% else %}
    <div>
    Hello World!
    </div>
{% endif %}

if-elif-else语句:

{% if name == "name" %}
    <div>
        {{ name }}
    </div>
{% elif name == "666" %}
    <div>
        666
    </div>
{% else %}
    <div>
        Hello World!
    </div>
{% endif %}

2.请求和响应

请求:

python"># 1.获取请求的方式
print(request.method)
# 2.获取GET方式传回的值
print(request.GET)
# 3.获取POST方式传回的值
print(request.POST)

响应:

python"># 1.直接返还字符串
# return HttpResponse("Hello, world!")

# 2.返还一个HTML文件,同时可以传参数
# return HttpResponse("something.html",{"something":"something"})

# 3.重定向
return redirect("www.google.com")

3.案例

3.1. 源代码

在urls.py中添加:

python">path("login/", views.login)

在views.py中添加:

python">def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    username = request.POST.get("username")
    passwd = request.POST.get("passwd")
    if username == "panda" and passwd == "123456":
        return HttpResponse("登录成功")
    return render(request, "login.html", {"error_msg": "用户名或密码错误,请重试"})

在templates中添加login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
    {# Django的安全机制,不加没办法正常打开界面 #}
    {% csrf_token %}
    用户名:<input type="text" name="username" placeholder="请输入用户名......">
    密 码:<input type="password" name="passwd" placeholder="请输入密码......">
    <input type="submit" value="提 交">
    <span style="color: red">{{ error_msg }}</span>
</form>
</body>
</html>

3.2. 详细说明

在浏览器搜索框中输入对应的网址属于GET请求方式,所以在访问login页面的时候会直接跳转到login.html文件,然后显示它的内容,但是HTML文件中有一句是<span style="color: red">{{ error_msg }}</span>,需要python文件进行传值error_msg,但是如果没有传值的话,Django默认是空,所以这一句话在这时候不起作用。

image-20240128183543427

当用户输入密码并提交的时候,由于login.html文件设置的表单提交是POST提交方式,所以会触发这个代码段:

python">username = request.POST.get("username")
passwd = request.POST.get("passwd")
if username == "panda" and passwd == "123456":
    return HttpResponse("登录成功")
return render(request, "login.html", {"error_msg": "用户名或密码错误,请重试"})

如果用户输入的用户名和密码均正确,就直接执行return HttpResponse("登录成功")

image-20240128183840315

但是如果输入的用户名和密码有一个不正确就会触发这句话return render(request, "login.html", {"error_msg": "用户名或密码错误,请重试"})这时候,login.html文件中的error_msg有值了,就会显示对应的样式:

image-20240128184016149

文章来源:https://blog.csdn.net/m0_62627216/article/details/135898781
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.niftyadmin.cn/n/5351391.html

相关文章

微信小程序如何搜索iBeacon设备

1.首先在utils文件夹下创建bluetooth.js和ibeacon.js 2.在 bluetooth.js文件中写入 module.exports {initBluetooth: function () {// 初始化蓝牙模块wx.openBluetoothAdapter({success: function (res) {console.log(蓝牙模块初始化成功);},fail: function (res) {console.l…

Linux系统中Docker的安装及常用组件的安装

什么是Docker Docker是一个开源的应用容器引擎&#xff0c;它可以让开发者将应用程序及其依赖项打包到一个可移植的镜像中&#xff0c;并发布到任何流行的操作系统上。Docker使用沙箱机制来隔离容器&#xff0c;使其相互独立&#xff0c;并简化了应用程序的部署和管理。沙箱机…

Byte Pair Encoding(BPE)算法及代码笔记

Byte Pair Encoding&#xff08;BPE&#xff09;算法 BPE算法是Transformer中构建词表的方法&#xff0c;大致分为如下几个步骤&#xff1a; 将语料中的文本切分为字符统计高频共现二元组将共现频率最高的二元组合并加入词表重复上述第二和第三直到词表规模达到预先设置的数量…

使用websocket后端接入文心一言

最近再写项目练手&#xff0c;想着最近大模型那么火&#xff0c;也想接入项目来玩一玩&#xff0c;于是去了解了一下相关的api和通信协议&#xff0c;最后选择了文心一言进行集成&#xff0c;国内的相对稳定。ERNIE-Bot-turbo - 千帆大模型平台 | 百度智能云文档 (baidu.com) …

paddle 动态图命名重复问题

引言 具体场景是这样的,我用ai studio提供的notebook跑动态图代码,第一遍正常,第二遍的时候就报参数名称已存在,虽然我也知道这是notebook存储之前的参数变量引起的,只需要重启再运行就可以了。但是重启代价太高了,尤其是前面已经写了很多代码,而我只是想测试这一个cell…

Kafka-服务端-GroupCoordinator

在每一个Broker上都会实例化一个GroupCoordinator对象&#xff0c;Kafka按照Consumer Group的名称将其分配给对应的GroupCoordinator进行管理&#xff1b; 每个GroupCoordinator只负责管理Consumer Group的一个子集&#xff0c;而非集群中全部的Consumer Group。 请注意与Kaf…

【Spark系列2】Spark编程模型RDD

RDD概述 RDD最初的概述来源于一片论文-伯克利实验室的Resilient Distributed Datasets&#xff1a;A Fault-Tolerant Abstraction for In-Memory Cluster Computing。这篇论文奠定了RDD基本功能的思想 RDD实际为Resilient Distribution Datasets的简称&#xff0c;意为弹性分…

Vue的状态管理Pinia

文章目录 一、介绍二、install三、store1、创建并全局引入2、使用 一、介绍 官网&#xff1a;https://pinia.web3doc.top/introduction.htmlPinia 是 Vue 官方团队开发的一个全新状态管理库Vue2和Vue3都可以使用去除了mutations&#xff0c;简化了状态管理的使用支持TS&#x…