【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是其中一个文件夹。

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

1 写GET表单

check_user_form.html添加代码:

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

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
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')

2 写表单指向的网址

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

app_name = 'users'

    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>Titletitle>
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>

结果如下图所示。

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

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

POST请求

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

1 写POST表单

add_user.html添加代码:

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

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>POST Paramstitle>
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+" 保存成功")

结果如下:

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

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

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

模版中的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

Original: https://blog.csdn.net/bill2766/article/details/124133094
Author: 小明2766
Title: 【Django入门手册】03 GET请求、POST请求、URL软编码

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734830/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球