django BBS project login登录功能实现
1、models
from django.db import models # Create your models here. from django.contrib.auth.models import User, AbstractUser class UserInfo(AbstractUser):
"""
用户信息
"""
nid = models.AutoField(primary_key=True)
telephone = models.CharField(max_length=, null=True, unique=True)
avatar = models.FileField(upload_to='avatars/', default="/avatars/default.png")
# auto_now_add=True
'''
auto_now_add
配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
auto_now
配置上auto_now=True,每次更新数据记录的时候会更新该字段。
'''
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) blog = models.OneToOneField(to='Blog', to_field='nid', null=True, on_delete=models.CASCADE) def __str__(self):
return self.username class Blog(models.Model):
"""
博客信息表(站点表)
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='个人博客标题', max_length=)
site_name = models.CharField(verbose_name='站点名称', max_length=)
theme = models.CharField(verbose_name='博客主题', max_length=) def __str__(self):
return self.title class Category(models.Model):
"""
博主个人文章分类表a
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='分类标题', max_length=)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid', on_delete=models.CASCADE) def __str__(self):
return self.title class Tag(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='标签名称', max_length=)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid', on_delete=models.CASCADE) def __str__(self):
return self.title class Article(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=, verbose_name='文章标题')
desc = models.CharField(max_length=, verbose_name='文章描述')
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
content = models.TextField() # comment_count = models.IntegerField(default=)
# up_count = models.IntegerField(default=)
# down_count = models.IntegerField(default=) user = models.ForeignKey(verbose_name='作者', to='UserInfo', to_field='nid', on_delete=models.CASCADE)
category = models.ForeignKey(to='Category', to_field='nid', null=True, on_delete=models.CASCADE)
tags = models.ManyToManyField(
to="Tag",
# 指定的是用哪个中间表
through='Article2Tag',
through_fields=('article', 'tag'),
) def __str__(self):
return self.title class Article2Tag(models.Model):
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(verbose_name='文章', to="Article", to_field='nid', on_delete=models.CASCADE)
tag = models.ForeignKey(verbose_name='标签', to="Tag", to_field='nid', on_delete=models.CASCADE) class Meta:
unique_together = [
('article', 'tag'),
] def __str__(self):
v = self.article.title + "---" + self.tag.title
return v class ArticleUpDown(models.Model):
"""
点赞表
""" nid = models.AutoField(primary_key=True)
user = models.ForeignKey('UserInfo', null=True, on_delete=models.CASCADE)
article = models.ForeignKey("Article", null=True, on_delete=models.CASCADE)
is_up = models.BooleanField(default=True) class Meta:
unique_together = [
('article', 'user'),
] class Comment(models.Model):
""" 评论表 """
nid = models.AutoField(primary_key=True)
user = models.ForeignKey(verbose_name='评论者', to='UserInfo', to_field='nid', on_delete=models.CASCADE)
article = models.ForeignKey(verbose_name='评论文章', to='Article', to_field='nid', on_delete=models.CASCADE)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
content = models.CharField(verbose_name='评论内容', max_length=) parent_comment = models.ForeignKey("self", null=True, on_delete=models.CASCADE) def __str__(self):
return self.content
2、views
from django.shortcuts import render,HttpResponse # Create your views here. from django.contrib import auth
def login(request):
back_message = {'user':None,'msg':None}
if request.is_ajax():
name=request.POST.get('name')
pwd=request.POST.get('pwd')
code=request.POST.get('code') if code.upper()== request.session['code'].upper():
user=auth.authenticate(request,username=name,password=pwd)
if user:
back_message['user'] = name
return JsonResponse(back_message) 后面类推
else:
return HttpResponse('用户名或密码错误')
else:
return HttpResponse('验证码错误') return render(request,'login.html') def get_random_color():
import random
return (random.randint(,),random.randint(,),random.randint(,)) def get_code(request):
import random
# with open('static/img/lhf.jpg','rb') as f:
# data=f.read()
# pip3 install pillow
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import random
img = Image.new("RGB", (, ), color=get_random_color()) draw = ImageDraw.Draw(img)
kumo_font = ImageFont.truetype("static/font/kumo.ttf", size=) valid_code_str = ""
for i in range():
random_num = str(random.randint(, ))
random_low_alpha = chr(random.randint(, ))
random_upper_alpha = chr(random.randint(, ))
random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])
draw.text((i * + , ), random_char, get_random_color(), font=kumo_font) # 保存验证码字符串
valid_code_str += random_char print("valid_code_str", valid_code_str)
f = BytesIO()
img.save(f, "png")
data = f.getvalue()
request.session['code']=valid_code_str return HttpResponse(data)
3、readme
需求
1 登录功能:基于ajax实现登录功能,生成图片验证码
2 注册功能:基于ajax和form组件实现
3 仿博客园系统首页
4 个人站点实现
5 后台管理页面
6 发布文章功能
7 基于bs4 处理xss攻击
8 文章详情页
9 文章评论,支持子评论
10 文章的点赞和反对
11 发送邮件功能 设计程序:(设计数据库表结构和关系)
UserInfo:用户信息 Blog:个人站点 Article:文章表 Category:文章分类表 Tag:标签表 Article2Tag:文章标签中间表 ArticleUpDown:文章点赞表 Comment:评论表
id user_id aritcleid comment parent_id
1 用户1 给文章 11 评论了 22 null
2 用户2 给文章 11 评论了 33 null
3 用户3 给文章11 评论了44 1
4 用户4 给文章11 评论了55 3
22
-44
-55
4、urls
from django.conf.urls import url
from django.contrib import admin
from mybbs import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^get_code/', views.get_code),
]
5、login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
<script src="/static/jquery-3.3.1.js"></script>
<title>登录页面</title>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>登录</h1>
<form>
{% csrf_token %}
<div class="form-group">
<label for="">用户名</label>
<input type="text" id="id_name" class="form-control">
</div>
<div class="form-group">
<label for="">密码</label>
<input type="text" id="id_pwd" class="form-control">
</div>
<div class="form-group">
<label for="">验证码</label>
<div class="row">
<div class="col-lg-6">
<input type="text" id="code" class="form-control">
</div>
<div class="col-lg-6">
<img height="" width="" src="/get_code/" alt="">
</div> </div>
</div>
<input type="button" id="submit" value="登录" class="btn btn-danger">
<span class='errors'></span>
</form> </div>
</div>
</div> <script> $("#submit").click(function () {
$.ajax({
url: '/login/',
type: 'post',
data: {
'name': $("#id_name").val(),
'pwd': $("#id_pwd").val(),
'code': $("#code").val(),
'csrfmiddlewaretoken':'{{csrf_token}}'
},
success: function (data) {
console.log(data)
if(data.user){
location.href='/index/'}
else{
$(".errors").text(data.msg)} #可在顶端style上加css样式,变红色
} })
}) </script>
</body>
</html>
django BBS project login登录功能实现的更多相关文章
- 动态网站项目(Dynamic Web Project)登录功能的实现(mvc(五层架构)+jdbc+servlet+tomcat7.0+jdk1.8)(js验证+cookie)
1.index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" p ...
- Django自带的登录功能
https://www.cnblogs.com/wspblog/p/6634262.html
- yii2.0自动登录功能的实现方法
参考地址:http://www.kuitao8.com/20150518/3747.shtml 自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动 ...
- BBS登录功能
BBS登录功能 一.后端实现 1.实现验证码 from PIL import Image, ImageDraw, ImageFont import random from io import Byte ...
- 6 Django REST framework JWT 和登录功能实现
JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证. 我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web token ( ...
- 第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html
第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入dja ...
- Django框架之cookie和session及开发登录功能
1.cookie是什么? Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从 ...
- BBS论坛 登录功能
四.登录功能 前端页面html代码: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- Django项目: 4.用户登录登出功能
用户登录登出功能 一.功能需求分析 1. 登录退出功能分析 流程图 功能 登录页面 登录功能 退出功能 二.登录页面 1. 接口设计 接口说明 类目 说明 请求方法 GET url定义 /user/l ...
随机推荐
- Win10系列:UWP界面布局进阶2
为了让用户可以在流畅浏览应用界面的同时提供与应用相关的功能按钮,Windows 10系统在用户界面当中引入了侧边栏,侧边栏可以在用户有需要对应用或者系统进行操作时显示,在没有需要操作的时候自动隐藏,并 ...
- MyBatis 为什么需要通用 Mapper ?
一.通用 Mapper 的用途 ? 我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字 ...
- win10与centos7的双系统U盘安装(一:制作u盘启动盘)
博主近来在学习linux系统,当然学习第一步自然是安装系统了,博主选择的是centos7,博主自己的电脑是联想的,系统是win10专业版,在历经数次失败后,博主成功使用u盘安装了win10和cento ...
- OO Summary Ⅲ
规格化设计的发展历史 (这一部分并没有找到答案,于是参考了好黄和温莎莎的blogs) 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化 ...
- tidb使用坑记录
转载自:https://www.cnblogs.com/linn/p/8459327.html tidb使用坑记录 1.对硬盘要求很高,没上SSD硬盘的不建议使用 2.不支持分区,删除数据是个大坑. ...
- vue-1-模板语法
文本 <span>Message: {{ msg }}</span><span v-once>这个将不会改变: {{ msg }}</span> 原始 ...
- hibernate查询oracle数据库表报错SQL state [null]; error code [17027]; 流已被关闭; nested exception is java.sql.SQLException: 流已被关闭
把表字段类型 long 修改为 number类型即可
- Ansible-playbook的简单使用 [转]
一. 介绍 ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playbook开创了很多特性,它可以允许你 ...
- Java总结篇系列:Java泛型(转)
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...
- 手机号的 DES-ECB 加密/解密
前言:公司的手机号加密更换了加密方法,这次改成 DES-ECB 加密了 代码操作 # -*- coding:utf-8 -*- import base64 import json from Crypt ...