七、Django学习之预备知识
其他关于Python Web开发笔记:(如果遇到问题可以一起交流~)
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文件改为:
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中加入:
html
{{ my_list }}
结果:
如果要提取列表中每一个变量不能使用Python中的[],要使用.
:
html
{{ my_list.1 }}
1.3. for循环
html
{% for each in my_list %}
<div>
{{ each }}
</div>
{% endfor %}
效果:
1.4. 条件语句
if语句:
html
{% if name == "panda" %}
<div>{{ name }}</div>
{% endif %}
if-else语句:
html
{% if name == "name" %}
<div>
{{ name }}
</div>
{% else %}
<div>
Hello World!
</div>
{% endif %}
if-elif-else语句:
html
{% 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:
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默认是空,所以这一句话在这时候不起作用。
当用户输入密码并提交的时候,由于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("登录成功")
但是如果输入的用户名和密码有一个不正确就会触发这句话return render(request, "login.html", {"error_msg": "用户名或密码错误,请重试"})
这时候,login.html文件中的error_msg
有值了,就会显示对应的样式: