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. Android方法数methods超过65536

    当Android App中的方法数超过65535时,如果往下兼容到低版本设备时,就会报编译错误: Cannot fit requested classes in a single dex file. ...

  2. JavaScript_5_对象

    1. JavaScrip中所有事物都是对象:字符串.数字.日期.等等 2. 在javaScripe中,对象是拥有属性和方法的数据 <!DOCTYPE html> <html> ...

  3. Java删除开头和末尾字符串

    //扩展2个String方法 /* * 删除开头字符串 */ public static String trimstart(String inStr, String prefix) { if (inS ...

  4. Forbidden You don't have permission to access /phpStudyTest/application/index/controller/Index.php on this server.

    发生情况:将thinkPHP从官网上下了  http://thinkphp.cn 然后安装了phpstudy和PHPstorm,并将thinkPHP解压到www路径下 在用PHPstorm打开 thi ...

  5. java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.

    需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...

  6. 计算机应用第三次作业:自动开机自动关机 常用DOS命令 关于文件文件夹

    一.自动开机 台式机启动时按住DEL键 进入一个蓝色的界面,界面上是英文提示 这个界面是BIOS  ,是在机器的ROM中存储 二.自动关机 自动重启 方法一在120秒钟后自动关机 win+r (RUN ...

  7. NSStream实现发送和接受数据

    一.基本概念在iOS中以NSStream(流)来发送和接收数据,可以设置流的代理,对流状态的变化做出相应.1连接建立2接收到数据3连接关闭NSStream:数据流的父类,用于定义抽象特性,例如:打开. ...

  8. C++系统学习之九:顺序容器

    元素在顺序容器中的顺序与其加入容器时的位置相对应.关联容器中元素的位置由元素相关联的关键字值决定.所有容器类都共享公共的接口,不同容器按不同方式对其进行扩展. 一个容器就是一些特定类型对象的集合.顺序 ...

  9. STA basic

  10. 【windows】【md5】查看文件的md5值

    certutil -hashfile filename MD5 certutil -hashfile filename SHA1 certutil -hashfile filename SHA256 ...