分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

ajax写登录页面

发布时间:2023-09-06 01:28责任编辑:彭小芳关键词:暂无标签

静态配置

STATICFILES_DIRS = ( ???????os.path.join(BASE_DIR,‘my_blog‘,‘static‘),)AUTH_USER_MODEL = "app01.UserInfo"
setting

表结构:models

from django.db import modelsfrom django.conf import settingsfrom django.contrib.auth.models import AbstractUser# Create your models here.class UserInfo(AbstractUser): ??#settings ?:AUTH_USER_MODEL ="项目名称.UserInfo" ???‘‘‘用户信息表‘‘‘ ???nid = models.BigAutoField(primary_key=True) ???nickname =models.CharField(max_length=32,verbose_name="昵称",unique=True) ???tel = models.IntegerField(verbose_name="电话",unique=True,null=True,blank=True) ???email = models.CharField(max_length=64,verbose_name="邮箱") ???avatar = models.FileField(verbose_name="头像",upload_to="avatar",default="/avatar/default.png") ???create_time = models.DateTimeField(verbose_name="创建时间",auto_now_add=True) ???class Meta: ???????verbose_name_plural = "用户信息表" ???def __str__(self): ???????return self.usernameclass Article(models.Model): ???‘‘‘ ???文章表 ???‘‘‘ ???title = models.CharField(max_length=64,verbose_name="文章标题") ???summary = models.CharField(max_length=244, verbose_name="文章概要") ???create_time = models.DateTimeField(verbose_name="创建时间",auto_now_add=True) ???update_time = models.DateTimeField(verbose_name="修改时间",auto_now=True) ???poll_count = models.IntegerField(verbose_name="点赞数",default=0) ???comment_count = models.IntegerField(verbose_name="评论数",default=0) ???read_count = models.IntegerField(verbose_name="阅读数",default=0) ???# is_essence = models.BooleanField(verbose_name="是否精华",default=0) ???# is_top = models.BooleanField(verbose_name="是否置顶",default=0) ???user = models.ForeignKey(to="UserInfo",verbose_name="所属作者",null=True,blank=True) ???classify = models.ForeignKey(to="Classfication",verbose_name="所属类别",null=True,blank=True) ???tags = models.ManyToManyField(to="Tag",through="Article2tag",through_fields=(‘article‘, ‘tag‘),verbose_name="所属标签") ???type_choices = [ ???????(1,"编程语言"), ???????(2,"软件设计"), ???????(3,"前端系列"), ???????(4,"数据库"), ???????(5,"操作系统") ???] ???artcle_type_id = models.IntegerField(choices=type_choices,default=None) ???class Meta: ???????verbose_name_plural = "文章表" ???def __str__(self): ???????return self.titleclass Article_detail(models.Model): ???‘‘‘文章细节表‘‘‘ ???article = models.OneToOneField(to="Article",verbose_name="所属文章") ???content =models.TextField(max_length=400,verbose_name="文章内容") ???class Meta: ???????verbose_name_plural = "文章细节表"class Tag(models.Model): ???‘‘‘标签表‘‘‘ ???name = models.CharField(max_length=32,verbose_name="标签名") ???blog = models.ForeignKey(to="Blog",verbose_name="所属博客") ???class Meta: ???????verbose_name_plural = "标签表"class Article2tag(models.Model): ???article = models.ForeignKey(verbose_name="文章",to="Article") ???tag = models.ForeignKey(verbose_name="标签",to="Tag") ???class Meta: ???????‘‘‘联合唯一‘‘‘ ???????unique_together = [ ???????????("article","tag") ???????]class Comment(models.Model): ???‘‘‘评论表‘‘‘ ???time = models.DateTimeField(verbose_name="评论时间",auto_now_add=True) ???content = models.CharField(max_length=265,verbose_name="评论内容") ???up_count = models.IntegerField(default=0) ???user = models.ForeignKey(to="UserInfo",verbose_name="评论人",null=True,blank=True) ???article = models.ForeignKey(to="Article",verbose_name="评论文章",null=True,blank=True) ???farther_comment = models.ForeignKey(to="Comment",verbose_name="父级评论",null=True,blank=True) ???# farther_comment = models.ForeignKey("self",verbose_name="父级评论",null=True,blank=True) ???class Meta: ???????verbose_name_plural = "评论表"class Article_poll(models.Model): ???‘‘‘文章点赞表‘‘‘ ???time = models.DateTimeField(verbose_name="点赞时间",auto_now_add=True) ???article = models.ForeignKey(to="Article",verbose_name="点赞文章",null=True,blank=True) ??#一个文章可以有多个赞 ???user = models.ForeignKey(to="UserInfo",verbose_name="点赞人",null=True,blank=True) ???# is_positive = models.BooleanField(default=1,verbose_name="点赞或踩") ???class Meta: ???????‘‘‘联合唯一‘‘‘ ???????unique_together = ("user", "article",) ???????verbose_name_plural = "文章点赞表"class Comment_poll(models.Model): ???‘‘‘评论点赞表‘‘‘ ???time=models.DateTimeField(verbose_name="点赞时间",auto_now_add=True) ???# is_positive = models.BooleanField(verbose_name="点赞或踩",default=1) ???user = models.ForeignKey(to="UserInfo",verbose_name="点赞用户",null=True,blank=True) ???comment = models.ForeignKey(to="Comment",verbose_name="点赞所属评论",null=True,blank=True) ??#一个评论可以有多个赞 ???class Meta: ???????‘‘‘联合唯一‘‘‘ ???????unique_together = ("user","comment",) ???????verbose_name_plural = "评论点赞表"class Blog(models.Model): ???‘‘‘个人站点表‘‘‘ ???title = models.CharField(max_length=32,verbose_name="个人博客标题") ???url = models.CharField(max_length=64,verbose_name="路径",unique=True) ???theme = models.CharField(max_length=32,verbose_name="博客主题") ???user = models.OneToOneField(to="UserInfo", verbose_name="所属用户") ???class Meta: ???????‘‘‘通过admin录入数据的时候个中文显示‘‘‘ ???????verbose_name_plural = "个人站点表" ???def __str__(self): ???????return self.titleclass Classfication(models.Model): ???‘‘‘博主个人文章分类表‘‘‘ ???title = models.CharField(max_length=32, verbose_name="分类标题") ???blog = models.ForeignKey(to="Blog",verbose_name="所属博客") ???class Meta: ???????verbose_name_plural = "分类表"
models

HTML:先引入bootstrap

<!DOCTYPE html><html lang="en"><head> ???<meta charset="UTF-8"> ???<title>Title</title> ???<script src="/static/dist/js/jquery-3.1.1.js"></script> ???<script src="/static/dist/js/bootstrap.js"></script> ???<link rel="stylesheet" href="/static/dist/css/bootstrap.css"> ???<link rel="stylesheet" href="/static/css/login.css"></head><body><div class="container"> ???<div class="row"> ???????<div class="col-md-5 col-md-offset-3"> ???????????<form><h1>欢迎您进入登陆页面</h1> ???????????????{% csrf_token %} ???????????????<div class="form-group"> ???????????????????<label for="username">用户名</label> ???????????????????<input type="text" class="form-control" id="username" placeholder="用户名"> ???????????????</div> ???????????????<div class="form-group"> ???????????????????<label for="password">密码</label> ???????????????????<input type="password" class="form-control" id="password" placeholder="密码"> ???????????????</div> ???????????????<div class="row validCode"> ???????????????????<div class="col-md-6"> ???????????????????????<div class="form-group"> ???????????????????????????<label for="validCode">验证码</label> ???????????????????????????<input type="text" class="form-control validCode_text" id="validCode" ??????????????????????????????????placeholder="验证码"> ???????????????????????</div> ???????????????????</div> ???????????????????<div class="col-md-6"> ???????????????????????<img class="validCode_img" src="/get_validCode_img/" alt="" width="200px" height="50px"> ???????????????????</div> ???????????????</div> ???????????????<div class="row"> ???????????????????<div class="col-md-6"> ?????????????????????<p> <span class="error"></span> <input type="button" value="登录" class="btn btn-primary btn-block " id="sub"></p> ???????????????????</div> ???????????????????<div class="col-md-6"> ???????????????????????<input type="button" value="注册" class="btn btn-success btn-block " id="sub"> ???????????????????</div> ???????????????</div> ???????????</form> ???????</div> ???</div></div><script> ???$("#sub").click(function () { ???????$.ajax({ ???????????url: "/login/", ???????????type: "POST", ???????????data: { ???????????????"username": $("#username").val(), ???????????????"password": $("#password").val(), ???????????????"validCode": $("#validCode").val(), ???????????????"csrfmiddlewaretoken": $("[name=‘csrfmiddlewaretoken‘]").val(), ???????????}, ???????????success: function (data) { ???????????????console.log(data) ???????????????var response = JSON.parse(data); ???????????????if (response["is_login"]) { ???????????????????location.href = "/index/" ???????????????} ???????????????else { ???????????????????$(".error").html(response["error_msg"]).css("color", "yellow") ???????????????} ???????????} ???????}) ???})</script></body></html>
login
from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ ???url(r‘^admin/‘, admin.site.urls), ???url(r‘^login/‘, views.login), ???url(r‘^get_validCode_img/‘,views.get_validCode_img),
url

视图函数:views

from django.shortcuts import render,redirect,HttpResponsefrom app01 import modelsfrom app01 import ?*from my_blog import settingsfrom django.contrib import authdef login(request): ???if request.is_ajax(): ???????username=request.POST.get("username") ???????password=request.POST.get("password") ???????validCode=request.POST.get("validCode") ???????login_response = {"is_login": False, "error_msg": None} ???????if validCode.upper() == request.session.get("keepValidCode").upper(): ???????????user = auth.authenticate(username=username, password=password) ???????????if user: ???????????????login_response["is_login"] = True ???????????????auth.login(request, user) ???????????else: ???????????????login_response["error_msg"] = "username or password error" ???????else: ???????????login_response["error_msg"] = ‘validCode error‘ ???????import json ???????return HttpResponse(json.dumps(login_response)) ???return render(request, "login.html")def get_validCode_img(request): ???from io import BytesIO ???import random ???from PIL import Image,ImageDraw,ImageFont ???img = Image.new(mode="RGB", size=(120, 40), ???????????????????color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) ???draw = ImageDraw.Draw(img, "RGB") ???font = ImageFont.truetype("my_blog/static/font/kumo.ttf", 25) ???valid_list = [] ???for i in range(5): ???????random_num = str(random.randint(0, 9)) ???????random_lower_zimu = chr(random.randint(65, 90)) ???????random_upper_zimu = chr(random.randint(97, 122)) ???????random_char = random.choice([random_num, random_lower_zimu, random_upper_zimu]) ???????draw.text([5 + i * 24, 10], random_char, ?????????????????(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), font=font) ???????valid_list.append(random_char) ???????# 画点 ???????for i in range(40): ???????????draw.point([random.randint(0, 120), random.randint(0, 40)]) ???????# 画线 ???????# ????for i in range(5): ???????# ????????draw.line( ???????# ????????????(random.randint(0, 120), random.randint(0, 40), random.randint(0, 120), random.randint(0, 40))) ???f = BytesIO() ???img.save(f, "png") ???data = f.getvalue() ???# ???valid_str = "".join(valid_list) ???print(valid_str) ???request.session["keepValidCode"] = valid_str ???return HttpResponse(data)
views

ajax写登录页面

原文地址:http://www.cnblogs.com/wanghaohao/p/7976425.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved