西游之路——python全栈——Form组件及生成html
一、URL添加
1 re_path('edit_user-(d+)$', views.edit_user), # 使用正则匹配
二、views.py操作
1 from django.shortcuts import render,redirect
2 from app01 import models
3 from app01.forms import UserForm
4
5 def users(request):
6 user_list = models.UserInfo.objects.all()
7 return render(request,'users.html',{'user_list':user_list})
8
9 def add_users(request):
10 if request.method == 'GET':
11 obj = UserForm()
12 return render(request,'add_users.html',{'obj':obj})
13 else:
14 obj = UserForm(request.POST)
15 if obj.is_valid():
16 # 直接用字典方式创建,前提是UserForm类字段名与表UserInfo字段名相对应
17 models.UserInfo.objects.create(**obj.cleaned_data)
18 return redirect('/users')
19 else:
20 return render(request, 'add_users.html', {'obj': obj})
21
22 # 为什么nid当参数传?
23 def edit_user(request,nid):
24 if request.method == 'GET':
25 # nid = request.GET.get('nid')
26 data = models.UserInfo.objects.filter(id=nid).first()
27 obj = UserForm({'username':data.username,'email':data.email})
28 return render(request,'edit_user.html',{'obj':obj,'nid':nid})
29 else:
30 # nid = request.GET.get('nid')
31 obj = UserForm(request.POST)
32 if obj.is_valid():
33 models.UserInfo.objects.filter(id=nid).update(**obj.cleaned_data)
34 return redirect('/users')
35 else:
36 return render(request, 'edit_user.html', {'obj': obj, 'nid': nid})
三、创建类
1 # 取别名dforms
2 from django import forms as dforms
3 from django.forms import fields
4
5 class UserForm(dforms.Form):
6 username = fields.CharField()
7 email = fields.EmailField()
四、HTML操作
显示页面 ---> 添加 ---> 编辑
1 <div><a href="/add_users">添加</a></div> 2 <ul> 3 {% for row in user_list %} 4 <li>{{row.id}}-{{row.username}}-{{row.email}}<a href="/edit_user-{{row.id}}">编辑</a></li> 5 {% endfor %} 6 </ul>
1 <form action="/add_users" method="POST" novalidate> 2 <p>{{obj.username}} {{obj.errors.username.0}}</p> 3 <p>{{obj.email}} {{obj.errors.email.0}}</p> 4 <input type="submit" value="提交"> 5 </form>
1 <form action="/edit_user-{{nid}}" method="POST" novalidate> 2 <p>{{obj.username}} {{obj.errors.username.0}}</p> 3 <p>{{obj.email}} {{obj.errors.email.0}}</p> 4 <input type="submit" value="保存"> 5 </form>
五、创建表
1 from django.db import models
2
3 class UserInfo(models.Model):
4 username = models.CharField(max_length=32)
5 email = models.EmailField(max_length=32)