首页 > 其他分享 >bbs项目

bbs项目

时间:2023-01-02 21:56:44浏览次数:37  
标签:obj form 项目 标签 用户 外键 文章 bbs

内容概要

主题:仿BBS项目

  • 项目开发基本流程
  • 项目分析(表)
  • 项目注册功能
  • 项目登录功能

今日内容详细

项目开发基本流程

1.需求分析
2.架构设计
3.分组开发
4.提交测试
5.交付上线

项目流程

仿造博客园项目
	核心:文章的增删改查
表分析
	先确定表的数量 再确定表的基础字段 最后确定表的外键字段
    	1.用户表
        2.个人站点表
        3.文章表
        4.文章分类表
        5.文章标签表
        6.点赞点踩表
        7.文章评论表
基础字段分析
	"""下列字段设计仅供参考 可以有更多的想法"""
    用户表
    	替换auth_user表并扩展额外的字段
        	电话号码、头像、注册时间
    个人站点表
    	站点名称(guts\kevin\jason)
        站点标题(他吗的努力吧傻软)
        站点样式(css文件)
    文章表
    	文章标题
        文章简介
        文章内容
        发布时间
    文章分类表
    	分类名称
    文章标签表    
    	标签名称
    点赞点踩表:记录哪个用户给哪篇文章点了推荐(赞)还是反对(踩)
        用户字段(用户主键)>>>:外键字段
        文章字段(文章主键)>>>:外键字段    
    	点赞点踩
    文章评论表:记录哪个用户给哪篇文章评论了什么内容
        用户字段(用户主键)>>>:外键字段
        文章字段(文章主键)>>>:外键字段
        评论内容
        评论时间
        外键字段(自关联)
    	"""
    	id	user_id   article_id    content   parent_id
    	1     1          1            哈哈哈     null
    	2     2          1             哈你吗     1
    	3     3          1             文明点     2
    	"""
  外键字段  
      用户表
    	用户与个人站点是一对一外键关系
    	
      个人站点表
    
       文章表
        	文章表与个人站点表是一对多外键关系
            文章表与文章分裂表是一对多外键关系
            文章表与文章标签表是多对多外键关系
    	'''
    	数据库字段优化设计:我们想统计文章的评论数 点赞数
    		通过文章数据跨表查询到文章评论表种对应的数据统计即可
    	但是文章需要频繁的展示 每次都跨表查询的话效率极低
    		我们再文章表种再创建三个普通字段
    	之后只需要确保每次操作评论表或者点赞点踩时同步修改上述三个普通			字段即可	
    	'''
    	文章评论数
        文章点赞数
        文章点踩数
    
    文章分类表
    	文章分类与个人站点是一对多外键关系
        
    文章标签表
    	文章标签与个人站点是一对多外键关系

注册功能

用户注册
	1.渲染前端标签
    2.校验用户数据
    3.展示错误提示
ps:forms组件、modelform组件
    
单独开设py文件编写  解耦合 
def register_func(request):
    # 前后端ajax交互 通常采用字段作为交互对象
    back_dict = {'code': 10000, 'msg': ''}
    # 1.先产生一个空的form_obj
    form_obj = myforms.RegisterForm()
    if request.method == 'POST':
        form_obj = myforms.RegisterForm(request.POST)  # username password confirm_password email csrfmiddlewaretoken
        if form_obj.is_valid():
            clean_data = form_obj.cleaned_data  # 存储符合校验的数据 {username password confirm_password email}
            # 将confirm_password键值对移除
            clean_data.pop('confirm_password')  # {username password email}
            # 获取用户上传的头像文件
            avatar_obj = request.FILES.get('avatar')  # 用户有可能没有上传
            if avatar_obj:
                clean_data['avatar'] = avatar_obj  # {username password email avatar}
            # 创建用户数据
            models.UserInfo.objects.create_user(**clean_data)  # 上述处理字典的目的就是为了创建数据省事
            back_dict['msg'] = '注册成功'
            back_dict['url'] = '/login/'
        else:
            back_dict['code'] = 10001
            back_dict['msg'] = form_obj.errors
        return JsonResponse(back_dict)
    return render(request, 'registerPage.html', locals())

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
</head>
<body>
<div class="container">
    <div class="col-md-8 col-md-offset-2">
        <h2 class="text-center">用户注册</h2>
        <form id="form">  <!--不使用form表单提交数据 但是用一下form标签 它有一个序列化功能-->
            {% csrf_token %}
            {% for form in form_obj %}
                <div class="form-group">  <!--目的是让多个获取用户数据的标签上下间距更大一些-->
                    <label for="{{ form.auto_id }}">{{ form.label }}</label>
                    {{ form }}
                    <span style="color: red" class="pull-right"></span>
                </div>
            {% endfor %}
            <!--用户头像自己编写相关标签获取-->
            <div class="form-group">
                <label for="myfile">头像
                    <img src="/static/img/default.jpg" alt="" width="120" id="myimg">
                </label>
                <input type="file" id="myfile" style="display: none">
            </div>
            <input type="button" id="subBtn" class="btn btn-primary btn-block" value="注册">

        </form>
    </div>
</div>
<script>
    //1.用户头像的实时展示
    $('#myfile').change(function () {
        // 1.产生一个文件阅读器对象
        let myFileReaderObj = new FileReader();
        // 2.获取用户上传的头像文件
        let fileObj = this.files[0];
        // 3.将文件对象交给阅读器对象读取
        myFileReaderObj.readAsDataURL(fileObj);
        // 等待文件阅读器对象加载完毕之后再修改src
        myFileReaderObj.onload = function () {
            // 4.修改img标签的src属性展示图片
            $('#myimg').attr('src', myFileReaderObj.result)
        }
    })

    // 2.给注册按钮绑定点击事件 发送ajax 携带了文件数据
    $('#subBtn').click(function () {
        // 1.先产生一个内置对象
        let myFormDataObj = new FormData();
        // 2.添加普通数据(单个单个的编写效率极低)
        {#console.log($('#form').serializeArray())  // 可以一次性获取form标签内所有普通字段数据#} // [{},{},{},{}]
        $.each($('#form').serializeArray(), function (index, dataObj) {  // 对结果for循环 然后交给后面的函数处理
            myFormDataObj.append(dataObj.name, dataObj.value)  // {'name':'','value':''}
        })
        // 3.添加文件数据
        myFormDataObj.append('avatar', $('#myfile')[0].files[0])
        // 4.发送ajax请求
        $.ajax({
            url: '',
            type: 'post',
            data: myFormDataObj,

            contentType: false,
            processData: false,

            success: function (args) {
                if (args.code === 10000) {
                    window.location.href = args.url
                } else {
                    let dataObj = args.msg;
                    // 如何针对性的渲染错误提示 {'username'} id_username
                    $.each(dataObj, function (k, msgArray) {
                        // 拼接标签的id值
                        let eleId = '#id_' + k
                        // 根据id查找标签 修改下面span标签的内容 并给父标签添加错误样式
                        $(eleId).next().text(msgArray[0]).parent().addClass('has-error')
                    })
                }

            }
        })
    })

    // 3.给所有的input标签绑定获取焦点事件 移除错误样式
    $('input').focus(function () {
        $(this).next().text('').parent().removeClass('has-error')

    })
</script>
</body>
</html>

登录功能

img标签的src属性
	1.可以直接填写图片地址
    2.还可以填写一个路由 会自动朝该路由发送get请求
    如果结果是图片的二进制数据 那么自动渲染图片

pip install pillow -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
    
    
def login_func(request):
    return render(request, 'loginPage.html')


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
</head>
<body>
       <div class="container">
        <div class="col-md-8 col-md-offset-2">
            <h2 class="text-center">用户登录</h2>
            <div class="form-group">
                <label for="name">用户名</label>
                <input type="text" id="name" class="form-control">
            </div>
            <div class="form-group">
                <label for="password">密码</label>
                <input type="password" id="password" class="form-control">
            </div>
            <div class="form-group">
                <label for="code">验证码</label>
                <div class="row">
                    <div class="col-md-6">
                        <input type="text" id="code" class="form-control">
                    </div>
                    <div class="col-md-6">
                        <img src="/get_code/" alt="" width="350" height="35">
                    </div>
                </div>
            </div>
            <input type="button" class="btn btn-success btn-block" value="登录">
        </div>
    </div>
</body>
</html>

标签:obj,form,项目,标签,用户,外键,文章,bbs
From: https://www.cnblogs.com/DragonY/p/17020625.html

相关文章

  • BBS仿博客园
    目录项目开发基本流程一、BBS表设计1.表字段设计1.用户表2.个人站点表3.文章标签表4.文章分类表5.文章表6.点赞点踩表7.文章评论表2.七章表之间的关系1.用户表和个人站点表......
  • django_BBS博客系统练习
    表设计表分析先确认表的数量再确认表的基础字段最后确认表的外键字段1.用户表(基于auth模块设计扩展,手机号,头像,注册时间)fromdjango.contrib.auth.modelsimportAbst......
  • Android网络游戏之神农诀项目开发--视频
    Android网络游戏之神农诀项目开发​   Android作为一款为移动终端打造的开源手机操作平台,其引领破除技术垄断、拥有自主知识产权、降低开发成本之潮流,引起业界的......
  • BBS项目 前期准备及注册、登录部分
    项目开发基本流程1.需求分析2.架构设计3.分组开发4.提交测试5.交付上线创建项目配置环境配置TEMPLATES=[{'BACKEND':'django.template.backends......
  • BBS项目练习
    BBS项目练习此项目是对博客园软件的简单模仿,旨在整合django的知识点。七张信息表用户表(与站点一对一)站点表文章表(与站点一对多)文章分类表文章标签表点赞点踩表......
  • BBS项目
    项目开发基本流程1.需求分析2.架构设计3.分组开发4.提交测试5.交付上线项目流程仿博客园项目 核心:文章的增删改查表分析 先确定表的数量,在确定表的基础字段,最......
  • BBS(仿博客园项目)-基于django框架详解(包含图文)
    BBS项目(仿博客园项目)项目简介使用python中django框架开发类似博客园基本功能的小项目技术:django框架、编程语言(python3.8)、前端基础(bootstarp3.4.1,jQuery3.5.1)、......
  • bbs项目(部分讲解)
    项目开发基本流程需求分析架构设计分组开发提交测试交付上线项目分析流程仿BBS项目:仿造博客园项目核心:文章的增删改查技术栈Django、MySQL功能注册......
  • Vue-element-template项目学习笔记
    1.vue在css引入背景图片报错:Modulenotfound:Error:Can'tresolve'../../images/icons/loading2.gif'in'/home。报错信息就是找不到路径,我是这样的写法:backgroun......
  • bbs项目day01---注册登录
    今日内容概要主题:仿BBS项目项目开发基本流程项目分析(表)项目注册功能项目登录功能今日内容详细项目开发基本流程1.需求分析2.架构设计3.分组开发4.提交测......