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. ios 开发发布证书配置详细流程

    iOS证书配置实践 本文参考了: iOS证书配置指南:http://dev.umeng.com/push/ios/license-configuration-guide 写在前面: 团队开发证书的管理 ...

  2. Python + selenium之unitest(2)

    unittest单元测试框架中重要的概念: 1.Test Case 一个Test Case实例就是一个测试用例.在一个完整的测试流程中,包括测试前准备环境的搭建(setUp),实现测试过程的代码(ru ...

  3. 转载《五大免费采集器哪个好,火车头,海纳,ET,三人行,狂人采集 》

    在目前的站长圈内,比较流行的采集工具有很多,但是总结起来,比较出名的免费的就这么几个:火车头,海纳,ET,三人行,狂人. 下面我们对这几款采集工具作一个简单的评比. 1.火车头 基本上人人都知道,那就 ...

  4. 唱吧APP产品体验报告

  5. cdoj 414 八数码 (双向bfs+康拓展开,A*)

    一道关乎人生完整的问题. DBFS的优越:避免了结点膨胀太多. 假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的. 分析:起始状态结点数为1,每加深一层,结点数An ...

  6. 解决ubuntu上ifconfig没有eth0/ens33且无法上网的问题

    ifconfig只有一个轮回端口lo,没有我们的网卡eth0,一开始以为是vsphere(新手对于vsphere不是很熟悉)上我的虚拟机配置问题,还查看了相关的网络配置,后来才知道是因为: 问题出在配 ...

  7. Mysql command line

    show databasename; use databasename; show tables; desc tablename;

  8. CPP-网络/通信:用CMarkup类操纵XML

      首先到http://www.firstobject.com/下载CMarkup教学版,解压后里面是一个DEMO,将Markup.h .cpp拷贝并添加到工程中,第一次编译可能会出现预编译错误,解决 ...

  9. 基于Nodejs的爬虫

    简介 基于 Node.JS 爬取 博客园 1W+博文,对博文内容做关键词提取,生成词云. 演示 安装 安装 git.Node.JS.MongoDB.Yarn 克隆代码 git clone git@gi ...

  10. Angular-网页定时刷新

    类上方引入“OnInit”.“OnDestroy” import { OnInit, OnDestroy } from '@angular/core'; 类实现“OnInit”.“OnDestroy” ...