Django学习之预备知识

七、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:

path("tpl/", views.tpl)

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

from django.shortcuts import render

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

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

1.2. 显示变量

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

例如将tpl函数改为:

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>

运行结果:

在这里插入图片描述

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

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.请求和响应

请求:

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

响应:

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

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

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

3.案例

3.1. 源代码

在urls.py中添加:

path("login/", views.login)

在views.py中添加:

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提交方式,所以会触发这个代码段:

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

相关推荐

  1. 深度学习预备知识2——数据预处理

    2024-01-29 13:04:05       53 阅读
  2. 【深度学习】入门预备知识大全

    2024-01-29 13:04:05       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 13:04:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 13:04:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 13:04:05       82 阅读
  4. Python语言-面向对象

    2024-01-29 13:04:05       91 阅读

热门阅读

  1. basicpython-6

    2024-01-29 13:04:05       40 阅读
  2. MySQL必看表设计经验汇总-上(精华版)

    2024-01-29 13:04:05       48 阅读
  3. ffmpeg4.0.4 ffmpeg.c 讲解

    2024-01-29 13:04:05       45 阅读
  4. 系统分析师-23年-上午试题

    2024-01-29 13:04:05       46 阅读
  5. 大语言模型-大模型基础文献

    2024-01-29 13:04:05       56 阅读
  6. mysql优化案例

    2024-01-29 13:04:05       51 阅读
  7. unicloud-db组件

    2024-01-29 13:04:05       48 阅读
  8. 了解云原生

    2024-01-29 13:04:05       62 阅读
  9. php小数四舍五入、向上取整、向下取整

    2024-01-29 13:04:05       51 阅读
  10. 动态设置小程序IOS底部小黑条

    2024-01-29 13:04:05       51 阅读
  11. torch.matmul和torch.bmm区别

    2024-01-29 13:04:05       64 阅读
  12. React Hooks 详解之 useState

    2024-01-29 13:04:05       63 阅读