###第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,或者说将表单的数据传送到这个网址。最主要的就是一个和,还有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>
结果如下图所示。
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+" 保存成功")
结果如下:
模版中的URL软编码
硬编码和强耦合的链接,对于一个包含很多应用的项目来说,修改起来是十分困难的。然而,因为你在 polls.urls
的 url()
函数中通过 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>
参考文献
Original: https://blog.csdn.net/bill2766/article/details/124133094
Author: 小明2766
Title: 【Django入门手册】03 GET请求、POST请求、URL软编码
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734830/
转载文章受原作者版权保护。转载请注明原作者出处!