Django form表单提交是必须要学会的,比如用户注册,修改,添加都是通过form表单提交的,以修改user用户为例,过程如下:
从用户列表跳转到---修改页面---修改页面显示要修改的数据---修改好之后form提交到数据库保存---保存成功之后跳转到用户列表,效果如图所示。
这里只做django form表单提交部分,先看看form表单的代码,如下。
第一步:添加一个修改用户的form表单,用户数据已经根据用户id查询出来了,这里直接通过{{ user.xxx }} 这样取值即可,根据id查询数据的方法在django入门10中有类似的方法,只是转发到用户详情页面了而已。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户信息修改</title> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> </head> <body> <form action="{% url 'edit_submit' %}" method="post"> {% csrf_token %} <input type="hidden" name="id" value="{{ user.id }}"> 用户名:<input type="text" name="username" value="{{ user.username }}"><br> 密码:<input type="text" name="password" value="{{ user.password }}"><br> <input type="submit" value="提交修改"> </form> </body> </html>
注意这里,django form表单“必须”要在form里面加入防跨站保护标签,否则提交标签会失败,如下。
{% csrf_token %}
第二步:根据action="{% url 'edit_submit' %}" 请求中的name='edit_submit' 到blog/urls.py里面寻找对应的处理方法,如下。
from django.conf.urls import url from .import views urlpatterns = [ # form表单提交url url(r'^user/edit_submit/$', views.edit_submit, name='edit_submit'), ]
第三步:在blog/views.py里面把修改的数据提交到sqlite数据库中,代码如下。
#form表单提交方法 def edit_submit(request): # 获取页面传过来的数据 userid = request.POST.get('id') name = request.POST.get('username') pwd = request.POST.get('password') # 根据user id查找数据该方法会根据User这个model自动找到对应的user表, # instance是user对象,可以随便取名,并不是关键字 instance = User.objects.get(id=userid) //把页面中获取到的用户名和密码设置到instance这个user对象中 instance.username = name instance.password = pwd # 保存数据 User.save(instance) #这是调用下面跳转到用户列表的方法 return user_list(request) # 跳转到用户列表 def user_list(request): lists = User.objects.all() return render(request, 'user/user_list.html', {'users': lists})
保存数据是一样的,只是不需要从数据库中根据id查询用户。