django_day10_项目相关
django_day10_项目相关
展示数据的方法
数据对象obj
- 普通字段
- obj.字段名 ====》 数据库该字段的值
带choices参数的
- obj.字段名 ====》 数据库该字段的值
obj.get_字段名_display() ====》 要显示的结果
外键
- obj.外键====》 所关联的对象
__str__方法 - obj.外键.字段
- 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
下载pip install django-ckeditor
注册app
INSTALLED_APPS = [
........
'ckeditor',
'ckeditor_uploader',
]
urls.py
urlpatterns = [
.........................
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
]
models.py
class ArticleDetailForm(forms.ModelForm): class Meta:
model = models.ArticleDetail # 只能是model
fields = "__all__"
form_obj = ArticleDetailForm()#实例化
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 %}
上传需要认证,取消认证
#将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_项目相关的更多相关文章
- 根据funID,personID获取最新规划包项目相关信息
1.定义:根据funID,personID获取最新规划包项目相关信息(code projecttype(阶段) Pname(code+name) projectID) 项目表tbl_cfg_Proje ...
- django_day11_项目相关
django_day11_项目相关 新增和编辑 路由 url(r'^category_add/$', views.category_change, name='category_add'), url( ...
- django_day09_项目相关
django_day09_项目相关 展示数据: 给模板一个querySet对象列表,循环出对象列表obj 普通字段 obj.字段名 ----> 数据库中的数据 外键 obj.外键 ------- ...
- django_day08_项目相关
django_day08_项目相关 定义数据库表 from django.db import models # Create your models here. class User(models.M ...
- IDEA 从SVN检出项目相关配置
1.新建好一个工程,然后通过SVN检出项目 2.检出后一般tomcat的环境是配置好的,点击上方Project Structure按钮,弹出窗体,查看Project项,一般没问题,如果要配置就配置Pr ...
- IntelliJ IDEA 项目相关的几个重要概念介绍
必备材料介绍 IntelliJ IDEA 对其他 IDE 转过来的用户有特别优待,对其专门整理了非常棒的资料,还请其他 IDE 过来的用户抽时间查看,会有很大帮助:Eclipse 用户可以看:http ...
- Java面试06|项目相关介绍
1.明确你的项目到底是做什么的,有哪些功能 广告投放机:项目主要是为移动端有针对性的进行广告展示. 媒体管理平台SSP:为媒体端实现多种变现途径 (1)广告投放机中关于广告检索与排序的功能 1.广告检 ...
- 预置第三方apk到MTK项目相关问题总结
目前5.0之后项目预置方式通用步骤为: 建立apk文件夹; 置目标apk到该文件夹下; 解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件); 在该文件夹下编写Androi ...
- Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试
内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...
随机推荐
- 「快速学习系列」我熬夜整理了Vue3.x响应性API
前言 Vue3.x正式版发布已经快半年了,相信大家也多多少少也用Vue3.x开发过项目.那么,我们今天就整理下Vue3.x中的响应性API.响应性APIreactive 作用: 创建一个响应式数据. ...
- rhel挂载本地光盘为yum源
挂载光盘 mount /dev/sr0 /mnt/cdrom mkdir /mnt/cdrom 临时挂载 mount /dev/sr0 /mnt/cdrom 永久挂载光盘 mount -a 执行挂载 ...
- JS 会有变量提升和函数提升
JavaScript变量函数声明提升(Hoisting)是在 Javascript 中执行上下文工作方式的一种认识(也可以说是一种预编译),从字面意义上看,"变量提升"意味着变量和 ...
- 从0到1建设智能灰度数据体系:以vivo游戏中心为例
作者: vivo 互联网数据分析团队-Dong Chenwei vivo 互联网大数据团队-Qin Cancan.Zeng Kun 本文介绍了vivo游戏中心在灰度数据分析体系上的实践经验,从&quo ...
- 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
1.前言 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识.其实这部分也没有什么,主要是给小伙伴或者童鞋们讲一些实际工作中的场景,然后隆重推出我们的猪脚(主角)-Fiddler. 1. ...
- C语言-直接排序
#include<stdio.h> #define MAXSIZE 100 typedef int KeyType; typedef struct { KeyType key; }Reco ...
- 这样优化Spring Boot,启动速度快到飞起!
微服务用到一时爽,没用好就呵呵啦,特别是对于服务拆分没有把控好业务边界.拆分粒度过大等问题,某些 Spring Boot 启动速度太慢了,可能你也会有这种体验,这里将探索一下关于 Spring Boo ...
- 二重循环中的break与continue
二重循环中的break和continue用于控制本层循环,注意其不会影响外层循环的执行,这边和C中的break和continue的作用范围是一样的,也符合逻辑 example: 点击查看代码 for ...
- python获取本机的安装所有应用( Windows)
Windows获取本机的安装所有应用 采用操作注册表的方式,理论上其他可通过操作注册表方式的动作均可 import winreg def get_window_software(hive, flag) ...
- 从零开始Blazor Server(4)--登录系统
说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...