BBS-登录
from django.db import models # Create your models here.
from django.contrib.auth.models import AbstractUser #用户
class UserInfo(AbstractUser):
nid=models.AutoField(primary_key=True)
telephone=models.CharField(max_length=32)
avatar=models.FileField(upload_to='avatar/',default='avatar/default.png')
create_data=models.DateTimeField(auto_now_add=True)
blog=models.OneToOneField(to='Blog',to_field='nid',on_delete=models.CASCADE,null=True) #站点(与用户一对一关系,不同用户所属的个人网站)
class Blog(models.Model):
nid=models.AutoField(primary_key=True)
#博客名称
title=models.CharField(max_length=32)
#站点的名称
site_name=models.CharField(max_length=32)
#博客主题样式
theme=models.CharField(max_length=32) #分类:自己创建的分类
class Category(models.Model):
nid=models.AutoField(primary_key=True)
#分类名称
title=models.CharField(max_length=32)
#所属博客: 这个分类属于哪个站点
blog=models.ForeignKey(to='Blog',to_field='nid',on_delete=models.CASCADE,null=True) #标签
class Tag(models.Model):
nid=models.AutoField(primary_key=True)
# 标签名称
title=models.CharField(max_length=32)
# 所属博客,跟Blog一对多 这个标签属于哪个站点
blog=models.ForeignKey(to='Blog',to_field='nid',on_delete=models.CASCADE,null=True) #文章
class Article(models.Model):
nid=models.AutoField(primary_key=True)
# 文章标题
title=models.CharField(max_length=32)
# 文章摘要
desc=models.CharField(max_length=255)
# 文章内容,存大文本
content=models.TextField()
#创建时间
create_date=models.DateTimeField(auto_now_add=True)
#跟user一对多,一个用户可以创建多篇文章
user=models.ForeignKey(to='UserInfo',to_field='nid',null=True)
#跟Category分类表一对多:一个分类对应多篇文章
category=models.ForeignKey(to='Category',to_field='nid',null=True)
#文章标题:与标签多对多关系,通过through指定自己写的中间表
#手动创建第三张表
tag=models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tag')) #文章与标签多对多关系表
class Article2Tag(models.Model):
nid=models.AutoField(primary_key=True)
#文章id
article=models.ForeignKey(to='Article',to_field='nid',null=True)
#标签id
tag=models.ForeignKey(to='Tag',to_field='nid',null=True) class ArticleUpDown(models.Model):
nid=models.AutoField(primary_key=True)
# 点赞/点踩 的用户
user=models.ForeignKey(to='UserInfo',to_field='nid',null=True)
# 点赞/点踩 的文章
article=models.ForeignKey(to='Article',to_field='nid',null=True)
# 赞还是踩
is_up=models.BooleanField(default=True) #评论
class Comment(models.Model):
nid=models.AutoField(primary_key=True)
# 评论的用户:一个用户可以有多条评论
user = models.ForeignKey(to='UserInfo', to_field='nid')
#评论的文章:一个文章可以对应多条评论
article=models.ForeignKey(to='Article',to_field='nid')
# 评论的内容
comm = models.CharField(max_length=255)
# 评论的时间
create_date = models.DateTimeField(auto_now_add=True) #因为可能会有自评论的情况:例如回复,所有要在评论表本身建立自关联
# parent_comment=models.ForeignKey(to='Comment',to_field='nid') #2种写法,例如comment
# 父评论的id,自关联,防止写脏数据
parent_comment = models.ForeignKey(to='self', to_field='nid', null=True)
models.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/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">
{% csrf_token %}
<div class="form-group">
<label for="id_name">用户名</label>
<input type="text" id="id_name" class="form-control"> </div>
<div class="form-group">
<label for="id_pwd">密码</label>
<input type="password" id="id_pwd" class="form-control"> </div>
<div class="form-group">
<label for="valid_code">验证码</label>
<div class="row">
<div class="col-md-6">
<input type="text" id="valid_code" class="form-control"> </div> <div class="col-md-6">
<!--img标签里面可以,写一个图片地址,也可以写二进制-->
<img src="/get_code/" alt="" id="cod_img"> </div> </div> </div> <div>
<button class="btn btn-danger " id="submit_btn">提交</button><span class="error"></span>
</div> </div> </div> </div>
<script>
<!--给验证码图片绑定点击事件,实现点击验证码能够获取新的验证码-->
$('#cod_img').click(function () {
$('#cod_img')[0].src=$('#cod_img')[0].src+'?'
}) $('#submit_btn').click(function () {
$.ajax({
url:'',
type:'post',
data:{
'name':$('#id_name').val(),
'pwd':$('#id_pwd').val(),
'valid_code':$('#valid_code').val(),
'csrfmiddlewaretoken':"{{ csrf_token }}", },
success:function(data){
<!--如果成功打印返回的back_msg={'user':None,'msg':None}字典类型-->
if (data.user){
//data是个object对象
alert(data.msg) //登录成功
}else {
$('.error').text(data.msg)
setTimeout(function () {
$('.error').text('')
},1000)
} }
})
}) </script> </body>
</html>
login.html
csrf攻击:

session:不用的浏览器在数据库里对应一条session

form表单渲染:

BBS-登录的更多相关文章
- BBS登录功能
BBS登录功能 一.后端实现 1.实现验证码 from PIL import Image, ImageDraw, ImageFont import random from io import Byte ...
- 1209 BBS 登录
目录 上周内容 今日内容 url.py views.py login home.html 逻辑流程 登录功能 上周内容 bbs项目 项目开发流程 需求分析 架构设计 分组开发 我们一般情况下都只是作用 ...
- BBS登录与注册功能
登录功能 视图函数 def my_login(request): if request.method == 'GET': return render(request, 'login.html') el ...
- ucenter用户登录过程
以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...
- B/S系统间跨域单点登录设计思路
基于B/S系统间单点登录 此处说的单点登录的概念,即不同系统公用一个登录界面.一处系统通过登录验证,在接入的各系统均为登录状态.一般有两种情景: 1) 一级域名相同 例如:tieba.baidu.c ...
- HttpClient相关
HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...
- HttpClient,DefaultHttpClient使用详解
HttpClient:是一个接口 首先需要先创建一个DefaultHttpClient的实例 HttpClient httpClient=new DefaultHttpClient(); 发送GET请 ...
- php的cookie和session相同主域名共享
如何使用chrome查看cookie和session详见另一篇文章,点这里 首先说cookie, $cookieDomain = '.elf.com'; setcookie('elf', 'im el ...
- uc_client是如何与UCenter进行通信的
以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...
- httpclient详细介绍
1.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...
随机推荐
- GIT新手入门学习教程
廖雪峰的GIT教程 链接地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)
题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...
- iOS动画——Layer Animations
我们先来看一下今天我们要实现的效果,今天实现的效果用第一篇View Animations能实现相同效果. 动画由书籍<iOS Animations by tutorials>提供,我只是一 ...
- TIF转JPG
public void TifToJpg(string tifPath, string tifName) { try { //找到后缀为TIF的图像,如果没有,就catch退出 int len = t ...
- UVA 11134 FabledRooks 传说中的车 (问题分解)
摘要:贪心,问题分解. 因为行列无关,所以这个二维问题可以分解成两个一维问题. 优先队列实现:类似区间点覆盖的问题,先按照左端点排序,相同然后在按右端点排序(灵活性小的优先选).最优的选法,当然是要使 ...
- [学习笔记] C++ 历年试题解析(二)--程序题
发现程序题也挺有价值的. 顺便记录下来几道. 1.题目 #include <iostream> #include <cstring> using namespace ① std ...
- 绘制方式和OpenGL枚举对应关系
绘制方式和OpenGL枚举对应关系 图元类型 OpenGL枚举量 点 GL_POINTS 线 GL_LINES 条带线 GL_LINE_STRIP 循环线 GL_LINE_LOOP 独立三角形 GL_ ...
- CMDB API验证
CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...
- key directories in the linux file system
Key directories in the file system: */: Root directory (base of file system) /bin: Executable progra ...
- javaweb基础(21)_两种开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...