【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

posted @ 2022-02-09 10:42  navii  阅读(76)  评论(0)    收藏  举报