美文网首页
Django的ajax案例

Django的ajax案例

作者: Chaweys | 来源:发表于2020-11-09 08:34 被阅读0次

    views视图文件

    实现用户注册
    页面主要功能包括:
    在页面中输入用户ID时,可实时监测ID是否可用
    单击验证图片时,显示新的验证码
    单击"提交"按钮时,依次检验用户ID,密码,e-mail地址是否可用。如果数据有错,在页面下方显示错误提示,在所有数据均有效时,将数据提交给服务器。
    所有操作使用Ajax完成,不刷新页面。
    
    
    #chapter7\newuser\views.py
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.template.response import TemplateResponse
    from random import randint,choice
    from PIL import Image,ImageDraw,ImageFont
    from django.http import FileResponse
    from .models import userinfo
    def getRandomChar():        #获取随机字符
        num =str(randint(0,9))          #获得随机数字
        lower=chr(randint(97,122))      #获得随机小写字母
        upper=chr(randint(65,90))       #获得随机大写字母
        char=choice([num,lower,upper])  #选择要使用的随机字符
        return char
    
    def createImg(request):    #创建验证码图片返回
        img=Image.new(mode="RGB",size=(160,30),color=(100,100,100))    #创建图片
        draw=ImageDraw.Draw(img)    #获取图片画笔,用于描绘字
        #设置字体,字体文件在项目同名子文件夹中
        font=ImageFont.truetype(font="arial.ttf",size=24)
        code=''
        for i in range(5):
            c=getRandomChar()                   #获得随机字符
            draw.text((10+30*i,2),text=c,fill=(255,255,255),font=font)#根据坐标填充文字
            code+=c                             #记录验证码字符
        request.session['randomcode']=code      #将验证码存入session
        f=open("temp.png",'wb')
        img.save(f, format="png")
        f.close()
        return FileResponse(open("temp.png",'rb'))
    
    def doCheckUid(request):
        ps=userinfo.objects.filter(uid=request.GET['uid'])
        if ps.count()==0:
            msg='ID可用'
        else:
            msg='ID已占用'
        return HttpResponse(msg, content_type="text/text;charset=utf-8")
    
    def returnCheckCode(request):
        return HttpResponse(request.session['randomcode'], content_type="text/text;charset=utf-8")
    
    def doAddNew(request):
        try:
            nuid = request.GET['uid']
            pwd = request.GET['pwd']
            nemail = request.GET['email']
            user=userinfo(uid=nuid,password=pwd,email=nemail)
            user.save()
            msg="已成功完成注册!"
            return HttpResponse(msg, content_type="text/text;charset=utf-8")
        except Exception as e:
            msg="意外出错:%s" % e
            return HttpResponse(msg, content_type="text/text;charset=utf-8")
    
    def toAddNew(request):
        return render(request,'newuser.html')
    

    models文件
    from django.db import models
    
    # Create your models here.
    
    class userinfo(models.Model):
        uid=models.CharField(max_length=10)
        password=models.CharField(max_length=8)
        email=models.CharField(max_length=20)
    
    
    模板文件newuser.html
    <!--chapter7\newuser\templates\newuser.html-->
    <!DOCTYPE html>
    <html>
    <head><script src="/static/jquery-3.4.1.min.js"></script></head>
    <body>
        <center>
            新用户注册<hr>
            <table>
                <tr><td align="right"> 用户ID:</td>
                    <td><input type="text" id="uid" maxlength="10">
                        <span id="ruid"></span>
                    </td></tr>
                <tr><td align="right">密码:</td>
                    <td><input type="password" id="pwd1" maxlength="8"></td></tr>
                <tr><td align="right">再次输入密码:</td>
                    <td><input type="password" id="pwd2" maxlength="8"></td></tr>            
                <tr><td align="right">Email:</td>
                    <td><input type="email" id="email" maxlength="20"></td></tr>
                <tr><td align="right">验证码:</td>
                    <td><img src="/getpng/" id="icode" />单击刷新<br />
                        <input type="text" id="code" maxlength="10"></td></tr>
                <tr><td colspan="2" align="center"><input type="button" value="提交" id="submit" /></td></tr>
            </table>
            <hr><span id="result"></span>
        </center>
        <script>
            var codeok = false
            var idok = false
            $(document).ready(function () {
                $('input').keyup(function () {//在输入数据时,清除上次的验证信息
                    $('#result').html('')    });
                $('#uid').keyup(function () {//在输入数据时,检查用户用户名是否可用
                    var uid = $("#uid").val();
                    $.get("/checkuid/", { 'uid': uid }, function (r) {
                        if (r == 'ID可用') { idok = true } else { idok = false }
                        $('#ruid').html(r)   })
                });
                $('#icode').click(function () {//单击时更改图片src,
                    var a = (new Date()).toTimeString()
                    $('#icode').attr('src', '/getpng/?t=' + a) //加上不同的参数,以便刷新图片
                    codeok = false   });
                $('#code').blur(function () {//结束输入验证码时验证是否正确
                    var code = $("#code").val();
                    $.get("/checkcode/", {}, function (r) {
                        if (r.toLowerCase() == code.toLowerCase()) { codeok = true } else { codeok = false }
                    })
                });
                $('#submit').click(function () {//单击提交按钮时,先检查数据,通过后提交服务器
                    if (!idok) {
                        $('#result').html('<span style="color:red">你输入的用户ID已被占用!</span>')
                        return 1  }
                    var pwd1 = $("#pwd1").val();
                    var pwd2 = $("#pwd2").val();
                    pwdok = false
                    if (pwd1 != pwd2) {
                        $('#result').html('<span style="color:red">两次输入的密码不一致!</span>')
                        return 1}
                    var reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
                    if (!reg.test($("#email").val())) {
                        $('#result').html('<span style="color:red">你输入的Email地址无效!</span>')
                        return 1}
                    if (!codeok) {
                        $('#result').html('<span style="color:red">验证码输入错误!</span>')
                        return 1}
                    var uid = $("#uid").val();
                    var pwd = $("#pwd1").val();
                    var email = $("#email").val();
                    var data = { 'uid': uid, 'pwd': pwd, 'email': email }
                    $.get("/addnew/", { 'uid': uid, 'pwd': pwd, 'email': email }, function (r) { $('#result').html(r) })
                });
            });
        </script>
    </body>
    </html>
    

    urls文件

    from django.contrib import admin
    from django.urls import path
    from app import views
    from newuser import views as newuser_views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('getdata/',views.getdata),
        path('dform/',views.useDataForm),
        path('dform3/',views.useDataForm3),
        path('dyfield/',views.testcharForm),
        path('dyfor/',views.testfor),
        path('formset/',views.testformsetfactory),
        path('modelform/',views.usepersonForm),
        path('mdiy/',views.userPersonFromDIY),
        path('media/',views.userPersonFromDIY_media),
        path('first/',views.getinfofirst),
        path('getinfo/',views.getPersonInfo),
        path('getpng/', newuser_views.createImg),
        path('checkuid/', newuser_views.doCheckUid),
        path('checkcode/', newuser_views.returnCheckCode),
        path('newfirst/', newuser_views.toAddNew),
        path('addnew/', newuser_views.doAddNew),
    ]
    
    ajax案例.png
    ajax案例2.png

    相关文章

      网友评论

          本文标题:Django的ajax案例

          本文链接:https://www.haomeiwen.com/subject/dffhbktx.html