登录功能

视图函数

def my_login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    else:
        name = request.POST.get('name')
        password = request.POST.get('password')
        code_text = request.POST.get('text')
        text = request.session.get('code_text')
        text = text.lower()
        user = authenticate(request, username=name, password=password)
        if user:
            if not text:
                return HttpResponse('验证码不能为空')
            if code_text == text:
                login(request, user)
                return HttpResponse('登录成功')
            else:
                return HttpResponse('验证码错误')
        else:
            return HttpResponse('用户名或密码错误')

前端页面:

<form>
                {% csrf_token %}
                <h2>登录界面</h2>
                <hr>
                <div class="form-group">
                    <label for="name">用户名</label>
                    <input type="text" name="name" id="name" class="form-control" placeholder="用户名" required>
                </div>
                <div class="form-group">
                    <label for="password">密码</label>
                    <input type="password" name="password" id="password" class="form-control" placeholder="密码" required>
                </div>
                <div class="form-group">
                    <label for="valid_code">验证码</label>
                    <div class="row">
                        <div class="col-md-6">
                            <input type="text" name="valid_code" id="valid_code" class="form-control" required>
                        </div>
                        <img src="/get_code/" alt="" width="50%" height="35" id="img_code" draggable="false">
                    </div>

                </div>
            </form>
            <a href="/register/" class="btn btn-primary pull-left">注册</a>
            <button type="button" class="btn btn-primary pull-right" id="btn">登录</button>
            <a href="#" id="change" draggable="false" class="change pull-right">看不清,换一张</a>

<script>
$('#btn').click(function () {
        $.ajax({
            url: '/login/',
            type: 'post',
            data: {
                'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val(),
                'name': $('#name').val(),
                'password': $('#password').val(),
                'text': $('#valid_code').val()
            },
            success: function (data) {
                alert(data)
            }
        })
    });

    $('#change').click(function () {
        $('#img_code')[0].src += '?'
    })
</script>

注册功能

froms组件

class MyForms(forms.Form):
    username = forms.CharField(max_length=18, min_length=2, label='用户名',
                               error_messages={'max_length': '最长不超过18位', 'min_length': '最短为2个字符', 'required': '不能为空'},
                               widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': '用户名'}))
    password = forms.CharField(max_length=18, min_length=2, label='密码',
                               error_messages={'max_length': '最长不超过18位', 'min_length': '最短为2个字符', 'required': '不能为空'},
                               widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': '密码'}))
    re_password = forms.CharField(max_length=18, min_length=2, label='确认密码',
                                  error_messages={'max_length': '最长不超过18位', 'min_length': '最短为2个字符',
                                                  'required': '不能为空'},
                                  widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': '确认密码'}))
    email = forms.EmailField(label='邮箱', error_messages={'invalid': '不符合邮箱格式', 'required': '不能为空'},
                             widget=widgets.EmailInput(attrs={'class': 'form-control', 'placeholder': '邮箱'}))

    def clean_username(self):
        name = self.cleaned_data.get('username')
        user = models.UserInfo.objects.filter(username=name).first()
        if user:
            raise ValidationError('用户名已存在')
        else:
            return name

    def clean(self):
        pwd = self.cleaned_data.get('password')
        re_pwd = self.cleaned_data.get('re_password')
        if pwd and re_pwd:
            if pwd == re_pwd:
                return self.cleaned_data
            else:
                raise ValidationError('两次密码不一致')

视图函数

def my_register(request):
    if request.method == 'GET':
        myforms = MyForms()
        return render(request, 'register.html', locals())
    if request.is_ajax():
        response = {'status': 100, 'msg': None}
        myforms = MyForms(request.POST)
        if myforms.is_valid():
            data = myforms.cleaned_data
            data.pop('re_password')
            my_file = request.FILES.get('myfile')
            if my_file:
                data['avatar'] = my_file
            user = models.UserInfo.objects.create_user(**data)
        else:
            response['status'] = 101
            response['msg'] = myforms.errors
        return JsonResponse(response)

前端页面

<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-4 col-md-offset-4">
            <form id="form">
                <h2>注册界面</h2>
                <hr>
                {% csrf_token %}
                {% for foo in myforms %}
                    <div class="form-group">
                        <label for="{{ foo.auto_id }}">{{ foo.label }}</label>
                        {{ foo }}
                    </div>
                {% endfor %}
                <div class="form-group">
                    <label for="myfile">头像<img src="/static/img/default.png" id="img_file" alt="" width="40"
                                               height="40"></label>
                    <input type="file" id="myfile">
                </div>
            </form>
            <button type="button" class="btn btn-primary pull-right" id="btn">提交</button>
        </div>
    </div>
</div>
</body>
<script>
    // change为控件值发生变化时触发的事件
    $('#myfile').change(function () {
        // 取出文件
        var file_obj = $('#myfile')[0].files[0];
        // 生成文件阅读器对象,把获取的图片放到img
        try{
            var filereader = new FileReader();
            // 把图片对象读入阅读器对象
            filereader.readAsDataURL(file_obj);
            // 等加载完毕后,渲染到img标签中
            filereader.onload = function () {
                // filereader.result获取阅读器对象中的值
                $("#img_file").attr('src', filereader.result)
            }
         }catch (e) {

        }
    });

    $('#btn').click(function () {
        // 上传文件使用formdata对象
        var formdata = new FormData();
        var formarr = $('#form').serializeArray();
        console.log(formarr);
        // jquery循环 循环往formdata对象中添加数据
        $.each(formarr, function (key, obj) {
            formdata.append(obj.name, obj.value)
        });
        // 添加文件对象数据
        formdata.append('myfile', $('#myfile')[0].files[0]);
        $.ajax({
            url: '/register/',
            type: 'post',
            processData: false,
            contentType: false,
            data: formdata,
            success: function (data) {
                if (data.status == '100'){
                    location.href = '/login/'
                }else {
                    var msg = data.msg;
                    $('span').remove();
                    for (i in msg){
                        console.log(i,msg[i]);
                        if (i == '__all__'){
                            $('#id_re_password').after('<span class="pull-right">'+ msg[i] + '</span>')
                        }
                        $('#id_'+i).after('<span class="pull-right">'+ msg[i] + '</span>')
                    }
                }
            }
        })
    })
</script>

BBS登录与注册功能的更多相关文章

  1. AndroidStudio制作登录和注册功能的实现,界面的布局介绍

    前言 大家好,给大家带来AndroidStudio制作登录和注册功能的实现,界面的布局介绍的概述,希望你们喜欢 每日一句: Success is connecting with the world a ...

  2. VS连接SQL Server 2008,并实现登录和注册功能

    --------------------- 作者:Cambridge 来源:CSDN 原文:https://blog.csdn.net/cambridgeacm/article/details/797 ...

  3. 基于struts2和hibernate的登录和注册功能——完整实例

    1.该项目使用MySQL数据库,数据库名为test,表名info,如图所示: 2.配置web.xml(Struts2使用) <?xml version="1.0" encod ...

  4. 用java集合模拟登录和注册功能

    package com.linkage.login; import java.util.HashMap;import java.util.Iterator;import java.util.Map;i ...

  5. 用java数组模拟登录和注册功能

    package com.linkage.login; import java.util.Scanner; public class user { // 存储用户名和密码 public static S ...

  6. JavaWeb 实现简单登录、注册功能

    1.首先创建一个简单的动态Javaweb项目 2.然后手动建立文件目录: 项目创建好之后,在src下建几个包: controller:控制器,负责转发请求,对请求进行处理,主要存放servlet: d ...

  7. Unity uGUI 登录及注册功能

    上次我们已经完成了登录界面的模拟功能,今天咱们把上次没做完的继续完善下!那么废话少说直接开始吧! PS:本次完善的功能有: 1,增加对数据库的操作. 2,使用了MD5Key值加密 3,完善登录和组测功 ...

  8. 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

    登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...

  9. 使用md5加密算法完成简单的登录和注册功能

    原理: 登录:后端controller层获取到客户的密码,通过下面代码:new Sha256Hash(pwd).toHex();将密码转换成md5散列,生成一个新的字符串与数据库的值进行比对,根据不同 ...

随机推荐

  1. xml约束技术之dtd

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.这篇文章作简单介绍下DTD的用法.想学习完整的请点击下面w3c的教程. 1.DTD官方教程 ##2.xml约束技术: DTD约束:语法相 ...

  2. P1979华容道(神仙题)

    题目描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华容道 ...

  3. leetcode-575-Distribute Candies(计算一个数组中元素的种类的快速方法)

    题目描述: Given an integer array with even length, where different numbers in this array represent diffe ...

  4. SQL SERVER中的二种获得自增长ID的方法

    新方法 insert into TblClass output inserted.tClassId values('Hi~班','英语班') 老方法 insert into 表名 () values ...

  5. Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)

    说到与前端通信,明白人都知道这章肯定会写两部分的东西啦. 关于后台 ①首先回顾前文,上一章环境搭建如图: ②我们在maven.example.controller下添加一个文件,并附上如图代码: ③: ...

  6. [原创]VMware Workstation 14.1.3 Pro安装CentOS_7.6.1810

    前言 Linux作为最主流的服务器操作系统,在市场上的使用占比保持着领先对位.其中CentOS作为基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本,在企业的服务器中,也 ...

  7. 解决Maven本地仓库没有Jar包问题,请求中央仓库自动下载以及手动下载方法

    一.首先指定本地仓库 <localRepository>D:\software\Maven_Home\mvn_repository</localRepository> 二.修改 ...

  8. 在线词云制作tagxedo

    最近在用python制作词云的时候发现了一个更加方便快捷很好玩的词云制作网站 http://www.tagxedo.com/app.html 所以今天就来大致介绍下是怎么使用的 1.先来介绍下tagx ...

  9. Hibernate的抓取策略(优化)

    延迟加载的概述 什么是延迟加载 延迟加载:lazy(懒加载).执行到该行代码的时候,不会发送语句去进行查询,在真正使用这个对象的属性的时候才会发送SQL语句进行查询. 延迟加载的分类 l  类级别的延 ...

  10. 2019美国大学生数学建模竞赛B题(思路)

    建模比赛已经过去三天了,但留校的十多天里,自己的收获与感受依然长存于心.下面的大致流程,很多并没有细化,下面很多情况都是在假设下进行的,比如假设飞机能够来回运送药品,运货无人机就只运货,在最大视距下侦 ...