ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BBS项目总结

2022-06-13 01:32:39  阅读:195  来源: 互联网

标签:总结 obj name 项目 list forms tag BBS id


目录

BBS总结

后端

1.如果要用forms组件就要先产生一个空对象
2.pillow模块
  from PIL import Image,ImageFont,ImageDraw
  Image # 生成图片对象
  ImageDraw # 生成画笔对象,可以在图片上乱涂乱画
  ImageFont # 如果生成文字可以控制字体的样式
   案例:img_obj=Image.new('RGB',(350,35),三个数字产生颜色)
       drow_obj=ImgDraw.Draw(img_obj)
       font_obj=ImageFont.truetype('字体文件路径',字体大小)
       draw_obj.text((i*60+45,0),产生的随机数字,font=font_obj)
  验证码可以存在session中便于后须取出比对
3.io模块
  from io import BytesIO,StringIO
  BytesIO  # 将数据保存在内存中取时以bytes类型返回
  StringIO  # 内存中保存数据且取时返回字符串
  案例:
  io_obj=BytesIO()
  img_obj.save(io_obj,'png')
  取io对象内的值io_obj.getvalue()
4.让前端识别语法的方法
  from django.utils.safestring import mark_safe
  mark_safe('前端代码')
5.bs4模块优化xss攻击问题
  from bs4 import BeautifulSoup
  soup=BeautifulSoup('content','lxml') # 产生一个对象
  tags=soup.find_all() # 取出所有的标签
  tag.decompose()  # 移除标签
6.获取前端中的单选和多选
  get('name属性')
  getlist('name属性')
7.对于request.user属性的修改
  request.user.属性=新属性
  此操作临时之后修改要保存
  request.user.save()
8.对于手动创建的第三张表关系
  首先要有这个对象
  再将它的多个关系通过for循环出来之后
   article_obj = models.Article.objects.filter(pk=article_pk).first()
  tag_id_list = request.POST.getlist('tag')  # 多选  [1,2,3,4]
  obj_list = []
  for tag_id in tag_id_list:                           obj_list.append(models.Article2Tag(article=article_obj, tag_id=tag_id))
  models.Article2Tag.objects.bulk_create(obj_list)
9.forms组件内控制文本框属性
    widget=forms.widgets.TextInput(attrs={'class': 'form-control'})
     widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'})
     widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'})
       widget=forms.widgets.EmailInput(attrs={'class': 'form-control'})
   钩子函数:钩什么返回什么
   self.add_error('字段','错误提示')
10.自关联
  ForeignKey(to='self',null=True)
11.表再django注册与显示设置
  admin.site.register(models.表名)
  继承自带的认证表
  from django.contrib.auth.models import AbstractUser
  对于后台对表的展示在表内定义
   class Meta:
        verbose_name_plural = '用户表'
   def __str__(self):
    return self.想展示的字段名
12.处理时间的模块
   from django.db.models.functions import TruncMonth
   date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values(
        'month').annotate(c=Count('pk')).values(
        'month', 'c')
  时间报错处理方法
  修改配置  TIME_ZONE = 'UTC'改为TIME_ZONE = 'Asia/Shanghai',USE_TZ = False
指定认证表 AUTH_USER_MODEL = 'app01.UserInfo'
指定登录装饰器跳转的路由配置LOGIN_URL = '/login/'
指定用户上传文件的存放位置
MEDIA_ROOT = os.path.join(BASE_DIR, '指定文件夹名')
13.暴露项目中的资源
from django.views.static import serve
固定书写路由
url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})

前端js总结

1.注册用户点击更换头像实时展示
  // 用户头像实时展示
    $('#avatar').change(function () {
        // 1.产生一个文件阅读器对象
        let myFileReader = new FileReader();
        // 2.获取用户上传的头像文件
        let avatarObj = this.files[0];
        // 3.将文件对象交给阅读器加载
        myFileReader.readAsDataURL(avatarObj)  // IO操作 需要消耗时间 但是是异步
        // 4.修改img标签的src属性
        // 等待文件阅读器对象加载完毕之后再修改src属性
        myFileReader.onload = function(){
            $('#img').attr('src',myFileReader.result)
        }
    })
2.获取文件数据找到forms组件渲染的标签值
  利用的主要是form表单生成标签
    $.each($('#form').serializeArray(),function (index,dictObj) {
    myFormData.append(dictObj.name,dictObj.value)
        })
   对于标签对象.files[0]
   jquery查找的标签[0].files[0]
   携带文件的参数
   contentType:false
   processDate:false
  // 获取到了所有的字段错误提示 如何对应展示???
  // 研究发现 渲染出来的标签id值都是 id_字段名  而后端返回的错误提示键是字段名 所以拼接即可
  $.each(args.msg, function (i,j) {
  let eleId = '#id_' + i;
 $(eleId).next().text(j[0]).parent().addClass('has-error')
3.对于点击验证码
  处理思路可以是将src属性值加上其他的符号即可重新发送请求获取
4.模板语法通过ajax传值需要变量要加上引号
5.针对有多个选项让用户选择时
   {% for tag in tag_list %}
                <input type="checkbox" name="tag" value="{{ tag.pk }}">{{ tag.name }}
            {% endfor %}
6.编辑时有多个默认值时
  {% for tag in tag_list %}
                {% if tag in article_obj.tags.all %}
                        <input type="checkbox" name="tag" value="{{ tag.pk }}" checked>{{ tag.name }}
                {% else %}
                        <input type="checkbox" name="tag" value="{{ tag.pk }}">{{ tag.name }}
                {% endif %}
            {% endfor %}
7.富文本类型
    <script charset="utf-8" src="/static/kindeditor/kindeditor-all-min.js"></script>
        <script>
                KindEditor.ready(function(K) {
                        window.editor = K.create('#d1',{
                            width: '100%',
                            height:'600px',
                            resizeType:1,
                            uploadJson : '/file_upload/',
                            extraFileUploadParams : {
                                    csrfmiddlewaretoken:'{{ csrf_token }}'
                            }
                        });
                });
        </script>

标签:总结,obj,name,项目,list,forms,tag,BBS,id
来源: https://www.cnblogs.com/ll71979461/p/16369424.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有