◢Django 购物项目 4

nav.html中的编辑信息【用户名,密码,确认密码(在表中多加列,比如性别年龄等)】

5d5cea814d2c4c52b8a69594e0d9793a.png

 可以看到和注册是一样的input框,所有该ModelForm继承自注册那里编写号的类,不同之处是用户名要显示在第一条input框中

91179d86c8274669885918222736130d.png

提交时

  •         要确保更改后的用户名不会与其他用户名一致
  •         要确保不更改用户名时不会查重

重写__init__方法,传递username与id【在index中添加request.session['userid']】

【username是给input框添加value值,id是排除该条数据之后的查重结果】

def personal(request):#input框里是存在数据的
    userid=request.session['userid']
    if request.method == 'GET':
        fm=PModelForm(username=request.session['user'],userid=userid)#向ModelForm中传入值
        return render(request,'person.html',{'form':fm})

    fm=PModelForm(data=request.POST,userid=userid)
    if fm.is_valid():
        models.Commodity.objects.filter(id=userid).update(username=fm.cleaned_data['username'],password=fm.cleaned_data['password'])
        return redirect('/index/')
    return render(request,'person.html',{'form':fm})
class PModelForm(RModelForm):

    def __init__(self, *args, username=None,userid,  **kwargs):
        super().__init__(*args, **kwargs)
        self.userid=userid
        if username is not None:
            self.fields['username'].initial = username
        for name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control'
            field.widget.attrs['placeholder'] = field.label
    def clean_username(self):
        txt_user = self.cleaned_data["username"]#这里的username是post请求后的数据,看不到
        #排除原有id基础上在筛选
        exits = models.Commodity.objects.exclude(id=self.userid).filter(username=txt_user).exists()
        if exits:
            raise ValidationError("账号已被注册")
        return txt_user

拆分类,路径

在前面,class与def都在views.py中,看起来很多,先将类提取出来

在app01下建立utils目录,建立一个.py文件(form.py),将所有的class剪切进去,views中只留下def,并进行对接

 现在views.py中只剩下了def,又分为客户和商业,拆分def【示范】

拆分完成后,删掉views.py文件【urls导入会冲突】 

from app01.views import customer#在urls.py替换views.py的导入

重新启动即可 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值