django_day10_项目相关

  • 展示数据的方法

    • 数据对象obj

      • 普通字段
      1. obj.字段名 ====》 数据库该字段的值
      • 带choices参数的

        1. obj.字段名 ====》 数据库该字段的值
        2. obj.get_字段名_display() ====》 要显示的结果
      • 外键

        1. obj.外键====》 所关联的对象 __str__ 方法
        2. obj.外键.字段
      • 自定义方法

        from django.utils.safestring import mark_safe
        def show_publish_status(self):
        color_dict = {True:'green',False:'#772a4d'}
        return mark_safe('<span style="background: {};color: white;padding: 3px">{}</span>'.format(color_dict[self.publish_status],self.get_publish_status_display()))
  • 定义modelform

    class ArticleForm(forms.ModelForm):
    class Meta:
    model = models.Article#只能是model
    fields = "__all__"
    exclude = ['detail']
    # widgets = {
    # 'title':forms.TextInput(attrs={'class':'form-control'})
    # }
    def __init__(self,*args,**kwargs):
    super().__init__(*args,**kwargs)#执行父类方法
    #自定义的操作
    # self.fields 是个有序字典 字典中的值就是字段的对象
    for field in self.fields.values():#field 就是models中定义的字段
    field.widget.attrs['class'] = 'form-control'#field.widgrt
    # 是拿到对应的插件的对象field.widget.attrs 然后拿到对应的属性做修改
  • 使用form

    def article_add(request):
    form_obj = ArticleForm()#什么都不传
    if request.method == 'POST':
    form_obj = ArticleForm(request.POST)#拿到form表单
    #开始校验
    if form_obj.is_valid():
    #获取文章详情字符串
    detail = request.POST.get('detail')
    # 创建文章详情对象
    detail_obj = models.ArticleDetail.objects.create(content=detail)
    form_obj.instance.detail_id = detail_obj.pk
    form_obj.save() # form_obj.instance.save()
    return redirect('article_list')
    return render(request, 'article_add.html', {'form_obj': form_obj}) #关联了俩个表
    def article_edit(request, pk):
    obj = models.Article.objects.filter(pk=pk).first() # 查到一个queryset对象 first拿到第一个 如果没有则返回为null
    form_obj = ArticleForm(instance=obj) #传了个instance对象
    if request.method == 'POST':
    form_obj = ArticleForm(request.POST, instance=obj) # 包含数据库没修改之前的数据 以及表单提交的数据
    if form_obj.is_valid(): # 通过校验
    form_obj.instance.detail.content = request.POST.get('detail')
    form_obj.instance.detail.save()# 修改以后 还要保存 文章详情
    form_obj.save()# 保存文章的信息
    return render(request, 'article_edit.html', {'form_obj': form_obj, 'obj': obj}) #HTML
    <form class="form-horizontal" method="post" action="" novalidate>
    {% csrf_token %}
    {% for field in form_obj %} {{ field.id_for_label }} # 拿到id {{ field.label }} #提示信息 models中的 verbose_name {{ field }} #生成input框 {{ field.errors.0 }} #错误 {% endfor %}
    </form>
  • 让用户上传图像

    #model中添加ImageField
    avatar = models.ImageField(upload_to='img/avatar',default='img/avatar/default.jpg') #ImageField 依赖pillow模块 #settings.py中的配置
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR,'media') #urls.py中的配置
    from django.views.static import serve
    from django.conf import settings
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('app01.urls')),
    url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}),
    ] #模板中使用
    注册时:form中加上 enctype="multipart/form-data"
    显示时:<img width="20px" src="/media/img/avatar/张伟.jpg" alt=""> #views中
    form_ojb = RegForm(request.POST,request.FILES)
  • 使用django-ckeditor

    1. 下载pip install django-ckeditor

    2. 注册app

      INSTALLED_APPS = [
      ........
      'ckeditor',
      'ckeditor_uploader',
      ]
    3. urls.py

      urlpatterns = [
      .........................
      url(r'^ckeditor/', include('ckeditor_uploader.urls')),
      ]
    4. models.py

      class ArticleDetailForm(forms.ModelForm):
      
          class Meta:
      model = models.ArticleDetail # 只能是model
      fields = "__all__"
      form_obj = ArticleDetailForm()#实例化
    5. html

      {{ form_obj.content }}

      引用静态文件

      {% block js %}
      {% load static %}
      <script type="text/javascript" src="{% static "ckeditor/ckeditor-init.js" %}"></script>
      <script type="text/javascript" src="{% static "ckeditor/ckeditor/ckeditor.js" %}"></script>
      {% endblock %}
    6. 上传需要认证,取消认证

      #将staff_member_required这个装饰器取消掉
      urlpatterns = [
      url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),
      url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),
      ] #改为下面这样
      from ckeditor_uploader import views urlpatterns = [
      url(r'^upload/', views.upload, name='ckeditor_upload'),
      url(r'^browse/', never_cache(views.browse), name='ckeditor_browse'),
      ]

django_day10_项目相关的更多相关文章

  1. 根据funID,personID获取最新规划包项目相关信息

    1.定义:根据funID,personID获取最新规划包项目相关信息(code projecttype(阶段) Pname(code+name) projectID) 项目表tbl_cfg_Proje ...

  2. django_day11_项目相关

    django_day11_项目相关 新增和编辑 路由 url(r'^category_add/$', views.category_change, name='category_add'), url( ...

  3. django_day09_项目相关

    django_day09_项目相关 展示数据: 给模板一个querySet对象列表,循环出对象列表obj 普通字段 obj.字段名 ----> 数据库中的数据 外键 obj.外键 ------- ...

  4. django_day08_项目相关

    django_day08_项目相关 定义数据库表 from django.db import models # Create your models here. class User(models.M ...

  5. IDEA 从SVN检出项目相关配置

    1.新建好一个工程,然后通过SVN检出项目 2.检出后一般tomcat的环境是配置好的,点击上方Project Structure按钮,弹出窗体,查看Project项,一般没问题,如果要配置就配置Pr ...

  6. IntelliJ IDEA 项目相关的几个重要概念介绍

    必备材料介绍 IntelliJ IDEA 对其他 IDE 转过来的用户有特别优待,对其专门整理了非常棒的资料,还请其他 IDE 过来的用户抽时间查看,会有很大帮助:Eclipse 用户可以看:http ...

  7. Java面试06|项目相关介绍

    1.明确你的项目到底是做什么的,有哪些功能 广告投放机:项目主要是为移动端有针对性的进行广告展示. 媒体管理平台SSP:为媒体端实现多种变现途径 (1)广告投放机中关于广告检索与排序的功能 1.广告检 ...

  8. 预置第三方apk到MTK项目相关问题总结

    目前5.0之后项目预置方式通用步骤为: 建立apk文件夹;  置目标apk到该文件夹下;   解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件);  在该文件夹下编写Androi ...

  9. Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试

    内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...

随机推荐

  1. UiPath官方视频Level1

    [UiPath官方视频Level1]第一课-UiPath简介https://www.bilibili.com/video/BV1zJ41187vB [UiPath官方视频Level1]第二课-变量和数 ...

  2. BluePrism手把手教程2.0 创建流程

    2.0.1 创建流程 2.0.2 设置流程名称 2.0.3 添加流程说明 2.0.4 添加流程成功 2.0.4 打开新建的流程 RPA行业微信交流群,欢迎大家扫码加入一起交流,此群用于RPA行业技术. ...

  3. 相约 DTCC 2021 | Tapdata 受邀分享:如何打造面向 TP 业务的数据平台架构

      2021第十二届中国数据库技术大会(DTCC)将于2021年10月18-20日,在北京国际会议中心举行,Tapdata 创始人唐建法受邀分享:如何打造面向 TP 业务的数据平台架构.   演讲时间 ...

  4. Tapdata 实时数据融合平台解决方案(五):落地

    作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 通过前面几篇文章,我们从企业数据整合与分 ...

  5. 21条最佳实践,全面保障 GitHub 使用安全

    GitHub 是开发人员工作流程中不可或缺的一部分.无论你去哪个企业或开发团队,GitHub 都以某种形式存在.它被超过8300万开发人员,400万个组织和托管超过2亿个存储库使用.GitHub 是世 ...

  6. 翟佳:高可用、强一致、低延迟——BookKeeper的存储实现

    分享嘉宾:翟佳 StreamNative 联合创始人 编辑整理:张晓伟 美团点评 出品平台:DataFunTalk 导读:多数读者们了解BookKeeper是通过Pulsar,实际上BookKeepe ...

  7. api.versioning 版本控制 自动识别最高版本和多Area但同名Contoller问题解决办法

    Microsoft.AspNetCore.Mvc.Versioning //引入程序集 .net core 下面api的版本控制作用不需要多说,可以查阅https://www.cnblogs.com/ ...

  8. SpringCloud gateway自定义请求的 httpClient

    本文为博主原创,转载请注明出处: 引用 的 spring cloud gateway 的版本为 2.2.5 : SpringCloud gateway 在实现服务路由并请求的具体过程是在 org.sp ...

  9. netdata检测工具的安装与使用

    Netdata 是一款 Linux 性能实时监测工具..以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu.内存.硬盘输入/输出.网络等linux性能的数据). Netdata文档地址: ...

  10. PHP进阶玩法

    1. 删除不必要的模块. PHP随带内置的PHP模块.它们对许多任务来说很有用,但是不是每个项目都需要它们.只要输入下面这个命令,就可以查看可用的PHP模块: # php - m  一旦你查看了列表, ...