【django入门】 07 ORM设计用户登录实例
概述
- 实现 增删查
- views.py内,增删查,各def一个函数
- templates内,增和查,各设计一个html页面;删不需要
urls.py内
- 设计3个url,指向3个函数
from django.urls import path
import app01.views
urlpatterns = [
path('admin/', admin.site.urls),
path('info_list/', app01.views.info_list),
path('info_add/', app01.views.info_add),
path('info_delete/', app01.views.info_delete),
]
views.py内
- 定义3个函数
from django.shortcuts import render, redirect, HttpResponse
from app01.models import UserInfo
def info_list(request):
data_list = UserInfo.objects.all()
return render(request, "info_list.html", {"data_list": data_list})
def info_add(request):
# 在add页面收到“GET”方法的请求(第一次打开add时),返回一个html页面,info_add.html
if request.method == "GET":
return render(request, "info_add.html")
# 在add页面以POST(submit action规定)提交后,通过“get”取到“POST”元素
user = request.POST.get("user")
pwd = request.POST.get("pwd")
age = request.POST.get("age")
# 在数据库新增数据行;并跳转至查询页面
UserInfo.objects.create(name=user, password=pwd, age=age)
return redirect("/info_list/")
def info_delete(request):
if request.method == "GET":
nid = request.GET.get("nid")
UserInfo.objects.filter(id=nid).delete()
return redirect("/info_list/")
templates内,新增2个html
- list_add.html
取名的时候注意,取为“list_add”,而不取“add_list”——事物、主体应该放在前面;而动作、状态应该放在后面;row_obj- 注意csrf_token,用的是逻辑语法{%%},而不是变量语法{
- 注意text前端展示值用的是placehoder,submit前端展示值用的是value
{# method是post#}
{# action为空,即提交给本页面自身 #}
{# 但post方式的请求被本页面接收后,在views.py中规定,实际跳至list_info #}
{# 所以即使删掉 action="" ,结果也一样 #}
<form method="post" action="">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="text" name="age" placeholder="年龄">
<input type="submit" value="提交">
</form>
- info_list.html 注意html的table层次、写法 ``` {# 在info_list添加链接,跳转到info_add #} 添加
<tr>
<th>id</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in data_list %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
{# 在每一行末尾,添加“删除”连接,跳转到带?nid=的delete链接,由views.py的delete函数接收 #}
{% endfor %}
{# 注意,引号内,nid=后面直接可以接{{ obj.id }} #} 删除 |
来源:BV1NL41157 武沛齐《2022 B站最详细django3教程(django从入门到实践)》P18

浙公网安备 33010602011771号