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-登录的更多相关文章

  1. BBS登录功能

    BBS登录功能 一.后端实现 1.实现验证码 from PIL import Image, ImageDraw, ImageFont import random from io import Byte ...

  2. 1209 BBS 登录

    目录 上周内容 今日内容 url.py views.py login home.html 逻辑流程 登录功能 上周内容 bbs项目 项目开发流程 需求分析 架构设计 分组开发 我们一般情况下都只是作用 ...

  3. BBS登录与注册功能

    登录功能 视图函数 def my_login(request): if request.method == 'GET': return render(request, 'login.html') el ...

  4. ucenter用户登录过程

    以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...

  5. B/S系统间跨域单点登录设计思路

    基于B/S系统间单点登录 此处说的单点登录的概念,即不同系统公用一个登录界面.一处系统通过登录验证,在接入的各系统均为登录状态.一般有两种情景: 1)  一级域名相同 例如:tieba.baidu.c ...

  6. HttpClient相关

    HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...

  7. HttpClient,DefaultHttpClient使用详解

    HttpClient:是一个接口 首先需要先创建一个DefaultHttpClient的实例 HttpClient httpClient=new DefaultHttpClient(); 发送GET请 ...

  8. php的cookie和session相同主域名共享

    如何使用chrome查看cookie和session详见另一篇文章,点这里 首先说cookie, $cookieDomain = '.elf.com'; setcookie('elf', 'im el ...

  9. uc_client是如何与UCenter进行通信的

    以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...

  10. httpclient详细介绍

    1.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

随机推荐

  1. GIT新手入门学习教程

    廖雪峰的GIT教程 链接地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  2. hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)

    题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...

  3. iOS动画——Layer Animations

    我们先来看一下今天我们要实现的效果,今天实现的效果用第一篇View Animations能实现相同效果. 动画由书籍<iOS Animations by tutorials>提供,我只是一 ...

  4. TIF转JPG

    public void TifToJpg(string tifPath, string tifName) { try { //找到后缀为TIF的图像,如果没有,就catch退出 int len = t ...

  5. UVA 11134 FabledRooks 传说中的车 (问题分解)

    摘要:贪心,问题分解. 因为行列无关,所以这个二维问题可以分解成两个一维问题. 优先队列实现:类似区间点覆盖的问题,先按照左端点排序,相同然后在按右端点排序(灵活性小的优先选).最优的选法,当然是要使 ...

  6. [学习笔记] C++ 历年试题解析(二)--程序题

    发现程序题也挺有价值的. 顺便记录下来几道. 1.题目 #include <iostream> #include <cstring> using namespace ① std ...

  7. 绘制方式和OpenGL枚举对应关系

    绘制方式和OpenGL枚举对应关系 图元类型 OpenGL枚举量 点 GL_POINTS 线 GL_LINES 条带线 GL_LINE_STRIP 循环线 GL_LINE_LOOP 独立三角形 GL_ ...

  8. CMDB API验证

    CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...

  9. key directories in the linux file system

    Key directories in the file system: */: Root directory (base of file system) /bin: Executable progra ...

  10. javaweb基础(21)_两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...