【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="" ,结果也一样 #}
- info_list.html 注意html的table层次、写法 ``` {# 在info_list添加链接,跳转到info_add #} 添加
id
姓名
密码
年龄
操作
{% for obj in data_list %}
{{ obj.id }}
{{ obj.name }}
{{ obj.password }}
{{ obj.age }}
{# 在每一行末尾,添加“删除”连接,跳转到带?nid=的delete链接,由views.py的delete函数接收 #}
{% endfor %}
{# 注意,引号内,nid=后面直接可以接{{ obj.id }} #}
删除
```
来源:BV1NL41157 武沛齐《2022 B站最详细django3教程(django从入门到实践)》P18
相关