zoukankan      html  css  js  c++  java
  • 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表单渲染:

  • 相关阅读:
    数字精确运算BigDecimal经常用法
    C3P0数据库连接池使用
    Theano学习笔记(四)——导数
    Leetcode--Merge Intervals
    1191 数轴染色
    P1021 邮票面值设计
    P1032 字串变换
    P1294 高手去散步
    P1832 A+B Problem(再升级)
    P1332 血色先锋队
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/9672500.html
Copyright © 2011-2022 走看看