【Django入门手册】03 GET请求、POST请求、URL软编码

###第3部分###

源代码地址:djProject: 这是我入门Django用的项目,其中功能包含有项目初始化设置、mysql的数据库建立、增删改查、图片的上传与显示等等

GET请求

如果你不想用表单form来GET,想直接使用网址xxx/username=???的方式,那直接写“第2步”那一块就好了。

注意⚠️:无论是GET还是POST,都需要设置template的路径,在settings.py修改代码(我这里为默认的):

'DIRS': [BASE_DIR / 'templates']

在这里我的templates保存在以下路径中,users是其中一个文件夹。

在这里插入图片描述

1 写GET表单

check_user_form.html添加代码:

users:check_user是后面决定的,用这个地址处理GET,或者说将表单的数据传送到这个网址。最主要的就是一个<input text>和<input submit>,还有method为GET。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{% url 'users:check_user' %}" method="get" >
        UserName:<input type="text" name="username"/>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

urls.py添加代码:

使用户在输入网址后,转到views的check_user_form。

    path('check_from/', views.check_user_form, name='check_user_form'),

views.py添加代码:

该函数命令指向check_user_form.html。

def check_user_form(request):
    return render(request,'users/check_user_form.html')
	# 这里的路径实际上是djProject/templates/users/users/check_user_form.html。因为我们在settings.py已经配置好了

2 写表单指向的网址

随后就是表单指向的地方了,在urls.py添加代码:

app_name = 'users'
# 第1步时,软编码需要设定app_name
    path('check_user/', views.check_user, name='check_user'),
    # 写上面一行

views.py添加代码:

request.GET获得参数,get_object_or_404获得数据库对象,随后跳转到show_user.html。

def check_user(request):
    request.encoding = 'utf-8'
    if 'username' in request.GET:
        user = get_object_or_404(User, name = request.GET['username'])
        user_info = {'user_id':user.id, 'user_name':user.name, 'user_phone':user.phone, 'user_password':user.password}
    return render(request,'users/show_user.html',{'user_info':user_info})

"""
# 如果需要同时处理get和post,下面是参考格式
def fun(request):
    if request.method=="GET":
	# GET请求时的业务逻辑
    elif request.method=="POST":
	# POST请求的业务卤藕
    else:
   	# 其他请求业务逻辑
ruturn
"""

show_user.html添加代码:

显示User的信息。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        <li>{{ user_info.user_id }}</li>
        <li>{{ user_info.user_name }}</li>
        <li>{{ user_info.user_phone }}</li>
        <li>{{ user_info.user_password }}</li>
    </ul>
</body>
</html>

结果如下图所示。

在这里插入图片描述

在这里插入图片描述

POST请求

和GET处理方法很相似,注意不要忘记设置templates路径哦,上面GET有提示!

1 写POST表单

add_user.html添加代码:

它用作填写User的信息。action的指向路径同理,在下面会给出。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>POST Params</title>
</head>
<body>
<form action="{% url 'users:add_user' %}" method="post" >
    {%csrf_token%} {# csrf_token用来验证 #}
    UserName:<input type="text" name="username"/>
    Phone:<input type="text" name="phone"/>
    Password:<input type="password" name="password"/>
    <input type="submit" value="Submit">
</form>
</body>
</html>

urls.py添加代码:

path('add_form/', views.add_user_form, name='add_user_form'),

views.py添加代码:

urls.py和views.py都是用作“网址”转->到“html”的。

def add_user_form(request):
    return render(request,'users/add_user_form.html')

2 写表单指向的网址

urls.py添加代码:

上面POST中action的路径,users是app_name,需要自己设定的。

app_name = 'users'
	path('add_user/', views.add_user, name='add_user'),

views.py添加代码:

def add_user(request):
    if request.method=='GET':
        return render(request,'users/add_user_form.html')
    else:
        username=request.POST.get('username','')
        phone = request.POST.get('phone', '')
        password=request.POST.get('password','')

        user = User()
        user.name = username
        user.phone = phone
        user.password = password
        user.save()

        return HttpResponse('username='+username+"&userphone="+phone+"&password="+password+" 保存成功")

结果如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

模版中的URL软编码

详情请看:Django官方教程:“去除模板中的硬编码 URL”部分

硬编码和强耦合的链接,对于一个包含很多应用的项目来说,修改起来是十分困难的。然而,因为你在 polls.urlsurl() 函数中通过 name 参数为 URL 定义了名字,你可以使用 {% url %} 标签代替它:

<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
# urls.py中加上:path('<int:question_id>/', views.detail, name='detail'),
# 然后变成下面这样
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
    
# urls.py中加上:polls/urls.py, app_name = 'polls'。可以跨app
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

参考文献

  1. django官方文档:可以参考如何写urlpatternsURL调度器
  2. Django:GET参考Django:GET参考2
  3. Django:POST
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值