◢Django 购物项目 1

数据库就利用前面建立的gw数据库,和super表,大家新建哈

form表单下要加        {% csrf_token %}        去除csrf错误

Django连接mysql及orm操作_django连接数据库mysql_柒拾霜染的博客-CSDN博客

 django设置session及登录退出案例_柒拾霜染的博客-CSDN博客

建立人员表【小,所以不区分】

将客户与商业人员放在一张表中,用id_card区分登陆之后属于什么身份

class Commodity(models.Model):
    username=models.CharField(max_length=32,verbose_name='用户名')
    password=models.CharField(max_length=16,verbose_name='密码')
    card={
        (0,'商业'),#减少占用内存
        (1,'客户'),
    }
    idcard=models.SmallIntegerField(verbose_name='身份',choices=card)

执行数据库生成语句,并在数据库中插入两条数据,一条是商业,一条是客户

制作登陆页面

【使用用户名与密码进行登陆,将用户名,密码,身份均存入session,跳转后利用身份判断是商业人员还是客户】Django使用bootstrp插件生成html

6f802e657ead422dad176a7b499218d0.png去掉remember,更改文字,加上自己的样式【选取样式,并进行更改】这里我加了一个div和span,对宽度进行了修饰【先调试出样式】

706e6a84958a46fd8fae2af23811a7f9.png

 通过url直接进去的是GET方法,当输入用户名与密码之后,用post提交表单,返回至本页面,并对接收的数据进行验证,若验证通过,则进入购物,若验证失败,则对失败原因做出提示【验证用户不存在,验证密码错误】

def index(request):
    if request.method == 'GET':#通过url打开是get
        form = IModelForm()
        return render(request, 'index.html', {'form': form})
    #这里是post,在提交表单后跳转至原地址,若检测出错,则继续填写,若一切正常
    form = IModelForm(data=request.POST)#获取提交的数据
    if form.is_valid():  # 校验数据【每个钩子方法走一遍,全部通过为真】
        request.session['user']=form.data['username']#设置ssession
        request.session['pwd']=form.data['password']
        request.session['idd']=models.Commodity.objects.filter(username=form.data['username']).first().get_idcard_display()
        #request.session['idd']=models.Commodity.objects.filter(username=form.data['username']).first().idcard#获取的是0或1,get_idcard_display()是提供的专门获取对应信息的
        return redirect('/show/')
    return render(request, 'index.html', {'form': form})

 从上面的代码即可看出,使用了ModelForm

  1. 先导入ModelForm库
    from django import forms
  2. 搭建使用类
    class 名称(forms.ModelForm):【那些样式是从bootstrap中复制来的】
    class 名称(forms.ModelForm):
        class Meta:
            model = models.表
            fields = [列...]
            widgets = {
                '列': forms.输入框样式(attrs={以键值对来表示使用什么样式,比如类选择器class与其名称})  # 单独设置样式
            }
    
        def __init__(self, *args, **kwargs):#固定
            super().__init__(*args, **kwargs)#固定
            for name, field in self.fields.items():#固定
                field.widget.attrs['class'] = 'form-control'#循环给每列生成的输入框加上样式
                field.widget.attrs['placeholder'] = field.label
        def clean_列(self):
            #局部钩子
            self.cleaned_data["列"]#获取该列生成的输入框里的数据
            raise ValidationError("错误信息")#在ModelForm中有专门的存储错误信息的列表errors
        def clean(self):
            #全局钩子错误也是存储在errors列表中,但不在像局部钩子将错误显示在输入框下,而是一个整体的位置,提示不在精细例如【账号或密码有误】
  3. 使用ModelForm

    form = IModelForm():#以列为元素的列表形式
    form = IModelForm(data=request.POST)#将表单传来的信息整合为字典形式,然后进行检测
    is_valid()#对所有钩子方法进行判断
class IModelForm(forms.ModelForm):
    class Meta:
        model = models.Commodity
        fields = ['username','password']#要生成的列
        widgets = {#给单列添加样式。添加密码不可见
            'password': forms.PasswordInput(attrs={'id': 'inputPassword3'})  # 单独设置样式
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        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"]
        # print('--------------->',txt_user)
        exits = models.Commodity.objects.filter(username=txt_user).exists()
        if not exits:
            raise ValidationError("账号不存在")#在ModelForm中有专门的存储错误信息的列表errors
        return txt_user#不写返回空

#第二个钩子检测密码是否与账号对应
    def clean_password(self):
        if 'username' in self.cleaned_data:#检测账号出错会删除键,self.cleaned_data['username']将不存在,所以账号存在时才会检测密码
            txt_user=self.cleaned_data['username']
            txt_pwd=self.cleaned_data['password']

            pwd=models.Commodity.objects.filter(username=txt_user).first().password
            if pwd != txt_pwd:#将输入的密码与数据库中存储的密码进行比较
                raise ValidationError('密码错误')
            return pwd

 拷贝bootstrap的样式

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
{#    <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css">#}
    <link rel="stylesheet" href={% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.min.css' %}>
    <style>
        .box{
            width: 600px;
            margin: 0 auto;
            margin-top: 100px;
        }
        .font{
            font-size: 20px;
            font-weight: bold;
            display: block;
            margin-left: 43%;
        }
    </style>
</head>
<body>
<div class="box"><!-- 更改宽度 -->
    <span class="font"><!-- 设置字体样式 -->
        gw登陆跳转
    </span>
    <form class="form-horizontal" method="post" novalidate><!--novalidate 关闭浏览器校验 action不写跳转至本URL-->
        {% csrf_token %}
        {% for i in form %}
        <div class="form-group">
          <label for="inputEmail3" class="col-sm-2 control-label">{{ i.label }}</label>
          <div class="col-sm-10">
              {{ i }}
              <span style="color: red">{{ i.errors.0 }}</span>
          </div>
        </div>
        {% endfor %}
        <div class="form-group">
          <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-default btn-primary">确认</button>
          </div>
        </div>
      </form>
    </div>
<script src={% static 'js/jquery-3.6.0.min.js' %} ></script>
<script src={% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.min.js' %}></script>
</body>
</html>

输入用户名与密码后,将用户名,密码,身份保存至session中,并跳站转至可查看页面

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值