zoukankan      html  css  js  c++  java
  • django实现用户登入

    ####前端
    ```html
    {% extends 'layout/basic.html' %}
    {% load static %}
    {% block title %} 用户登录 {% endblock %}

    {% block css %}
        <link rel="stylesheet" href="{% static 'css/account.css' %}">
    {% endblock %}

    {% block content %}
        <div class="account">
            <div class="title">用户登录</div>
            <form method="POST" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    {% if field.name == 'code' %}
                        <div class="form-group">
                            <label for="{{ field.id_for_label }}">{{ field.label }}</label>
                            <div class="row">
                                <div class="col-xs-7">
                                    {{ field }}
                                    <span class="error-msg">{{ field.errors.0 }}</span>
                                </div>
                                <div class="col-xs-5">
                                    <img src="{% url 'image_code' %}" id="imageCode" title="点击更换图片">
                                </div>
                            </div>
                        </div>
                    {% else %}
                        <div class="form-group">
                            <label for="{{ field.id_for_label }}">{{ field.label }}</label>
                            {{ field }}
                            <span class="error-msg">{{ field.errors.0 }}</span>
                        </div>
                    {% endif %}
                {% endfor %}
                <div>
                    <div style="float: right;">
                        <a href="{% url 'login_sms' %}">短信验证码登录?</a>
                    </div>
                </div>
                <div class="row">
                    <div class="col-xs-3">
                        <input type="submit" class="btn btn-primary" value="登  录"/>
                    </div>
                </div>
            </form>
        </div>
    {% endblock %}

    {% block js %}
        <script>
            $(function () {
                $('#imageCode').click(function () {
                    var oldSrc = $(this).attr('src');
                    $(this).attr('src', oldSrc + "?");
                })
            })
        </script>
    {% endblock %}
    ```
    ####在view中处理登入函数
    ```python
    def login(request):
        """用户账号登入"""
        if request.method == 'GET':
            form = LoginForm(request)
            return render(request, 'login.html', {'form': form})
        form = LoginForm(request,data = request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user_object = models.UserInfo.objects.filter(Q(mobile_phone=username)|Q(email=username)).
                filter(password=password).first()
            if user_object:
                request.session['user_id'] = user_object.id
                request.session.set_expiry(60*60*24*12)
                return redirect('index')
            form.add_error('username','用户名或者密码错误')
      return render(request, 'login.html', {'form': form})
    ```
    ####在Form中进行的处理
    先创建一个类,把一些from类的公共要创建的东西写入进去,然后让其他的类继承它就可以节约很多代码了
    ```python
    class bootstrap(object):
        bootstrap_class_exclude = []
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
            for name,filed in self.fields.items():
                if name in self.bootstrap_class_exclude:
                    continue
                filed.widget.attrs['class'] = 'form-control'  # 添加属性
                filed.widget.attrs['placeholder'] = '请输入%s'%(filed.label,)
    ```
    ####创建对form进行用户账户登入操作
    ```python
    class LoginForm(bootstrap,forms.Form):
        username = forms.CharField(label='邮箱或手机号')
        password = forms.CharField(label='密码',widget=forms.PasswordInput())
        code = forms.CharField(label='图片'
                                     '验证码')
        def __init__(self, request, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.request = request
        def clean_password(self):
            pwd = self.cleaned_data['password']
            return encrypt.md5(pwd)  # 密码加密并且返回
        def clean_code(self):
            """判断验证码是否输入正确"""
            code = self.cleaned_data['code']
            # 去session中去获取验证码
            session_code = self.request.session.get('image_code')
            if not session_code:
                raise ValidationError('验证码已经过去')
            if code.strip().upper() != session_code.strip().upper():
                raise ValidationError('验证码输入错误')
            return code
    ```
  • 相关阅读:
    5月读书日志
    把代码搬到Git Hub 吧(一)
    RTX二次开发(二)(基于ASP.NET)
    RTX二次开发(一)(基于ASP.NET)
    文件夹下迭代查询文件
    JS URL传递中文参数时出现乱码的处理
    js实现上下滑动侧边栏
    基本select语句的生命周期
    NodeJs下的测试框架Mocha
    带新人感想
  • 原文地址:https://www.cnblogs.com/KingOfCattle/p/13673135.html
Copyright © 2011-2022 走看看