django入门与实践(续)
完善博客
博客页面设计
页面概要
1.博客主页面
主页面内容
文章标题列表,超链接
发表博客按钮(超链接)
列表编写思路
取出数据库中所有文章对象
将文章对象们打包成列表,传递到前端
前端页面把文章以标题超链接的形式逐个列出
模板for循环
{% for XX in XXS %}
HTML语句
{% endfor %}
*模板中调用对象或者说展示数据用的两对花括号,这里是一对花括号中加了两个百分号
2.博客文章内容页面
页面内容
标题
文章内容
修改文章按钮(超链接)
页面的编写过程
关键点:url的参数传递
首先在响应函数中添加了一个叫article_id的参数,写在request后面
然后写了一个URL正则表达式,用来匹配数字,并以article_id为组名
URL正则中的组名必须和响应函数中的参数名保持一致,否则会报错的
开发编辑页面之前,先把主页面下面两个链接补全
Django中的超链接
超链接目标地址
href后面是目标地址(html语言中,a标签里的href就是超链接的目标地址)
template中可以用“{% url ’app_name:url_name‘ param %}”
(Django,是在template中,有一种特殊的写法,url:关键字,单引号里面的是目标地址,冒号前是应用的命名空间的名称,冒号后是链接名,param:地址的参数,就像article_id这种参数,写在url后面,以这种形式体现出来)
其中app_name和url_name都在ur配置文件l中配置
再配URL
url函数的名称参数
根urls,写在include()的第二个参数位置,namespace=’blog‘
应用下则写在url()的第三个参数位置,name = 'article'
主要取决于是否使用include引用了另一个url配置文件
3.博客撰写页面
页面内容
标题编辑栏
文章内容编辑区域
提交按钮
一个编辑页面,涉及到了两个响应函数,一个是页面本身的响应函数,另一个是表单提交的目的地,也就是aciton的响应函数
页面本身的响应函数
编辑响应函数
我们在表单里填写的内容,浏览器通过http请求将他们传递到后台的时候,这些数据都会被写在这个请求中,因此,我们的后台代码接收表单的数据的过程,实际上就是接收http请求中夹带的数据的过程,
通过http请求传递过来的数据,就放在request对象里(响应函数中的request参数),http请求分为get,post等方法,因此,request对象对不同的请求方法分别创建了各自的字典,用于存储他们的数据,
request.POST['参数名'],request.POST用于存储post请求的字典,里面存放的键值对就是前端传递过来的数据
取得了数据之后,就要把数据存储到数据库中了,Django中由于有model的存在,因此,我们所有和数据库的操作都是和模型类在做交互
使用request.POST['参数名']获取表单数据
models.Article.objects.create(title,content)创建对象
如果通过post方法提交表单,那么必须在前端页面加一句{% crsf_token %} ,csrf是csrf的一个标记,用于防范csrf,csrf是跨站请求伪造,针对网站的一种攻击行为
补全新文章链接
修改文章的页面
修改文章编辑页面和新文章编辑页面区别
思路
新文章为空,修改文章有内容
修改文章页面有文章对象
文章的ID
编辑页面搞定之后,接下来处理edit_action 依然可以通过采用url传递文章id的办法来做,但这里用另一种方法:同样也是传id到后台,但不需要再去修改url以及响应函数的参数
做法:把article_id放在一个隐藏的input标签的value里,在上下各添加一个
修改后台响应函数,在edit_aciton这里获取这个id,然后做下判断,当article_id不为0的时候,就要取出article对象,然后再给title,content分别赋值
赋值操作:只要直接给对象的属性赋值,再执行save方法就可以了,所有针对数据的操作,都是针对对象的操作
修改数据
article.title = title
article.save()
补充小技巧一:
Templates过滤器
什么是过滤器?
写在模板中,属于Django模板语言
可以修改模板中的变量,从而显示不同的内容
怎么使用过滤器?
{{value|filter}}
例:{{list_nums|length}}
过滤器可叠加:{{value|filter1|filter2|...}}
用过滤器后
补充小技巧二:
Django Shell
什么是Django Shell?
它是一个Python的交互式命令行程序
它自动引入了我们的项目环境
我们可以使用它与我们的项目进行交互(可以在这里通过代码的方式和项目进行交互)
如何使用Django Shell
python manage.py shell
from blog.models import Article
Article.objects.all()
之所以显示标题,因为在models中给Article类添加了一个__str__方法,用于显示这个类的对象
有什么用?
可以使用Django shell来进行一些调试工作
测试未知的方法
补充小技巧三:
Admin增强
如果要显示更多的分类,第一列显示标题,第二列显示内容等等
当前的Article类是通过admin.site.register(Article)直接注册到后台管理系统的
如果想要显示更多的分类,第一列显示标题,第二列显示内容等等,需要改变现在的注册方式
创建admin配置类
创建admin配置类class ArticleAdmin(admin.ModelAdmin)
注册:admin.site.register(Article,ArticleAdmin),把Artile和配置类绑定在一起
显示其他字段
在刚才的配置类中加上一条属性
list_display = ('title','content')
list_display同时支持tuple和list,建议使用tuple,不可变的,安全一些
这里的字段名必须是字符串,和models里的字段名要一模一样
python manage.py makemigrations
python manage.py migrate
过滤器
list_filter = ('pub_time',)
官方文档
https://docs.djangoproject.com/en/3.0/ref/contrib/admin/
django入门与实践(续)的更多相关文章
- Django入门与实践 17-26章总结
Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...
- Django入门项目实践(下)
5.设置应用程序的样式 安装django-bootstrap3. # untitled/untitled/settings.py # ··· INSTALLED_APPS = [ 'django.co ...
- Django入门项目实践(中)
4.用户账户 4.1 让用户能够输入数据 添加新主题 # untitled/learning_logs/forms.py from django import forms from .models i ...
- Django入门项目实践(上)
项目结构 1.建立项目 File -->> New Project... 第一个Location是项目所在的目录,第二个Location是项目独立的Python运行环境,我们称之为Virt ...
- Django入门与实践-第26章:个性化工具(完结)
http://127.0.0.1:8000/boards/1/topics/62/reply/ 我觉得只添加内置的个性化(humanize)包就会很不错. 它包含一组为数据添加“人性化(human t ...
- django入门与实践 - 关于升级到django 3.7,三种模板超链接配置(编辑中)
第一种方法: 在myblog/urls.py模块中: from django.contrib import admin from django.urls import path, include ur ...
- Django入门与实践-第14章:用户注册(完结)
http://127.0.0.1:8000/signup/ django-admin startapp accounts INSTALLED_APPS = [ 'accounts', ] # mypr ...
- Django入门与实践-第13章:表单处理(完结)
http://127.0.0.1:8000/boards/1/ http://127.0.0.1:8000/boards/2/ http://127.0.0.1:8000/boards/3/ http ...
- Django入门与实践-第12章:复用模板(完结)
http://127.0.0.1:8000/http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1 ...
随机推荐
- 【新人赛】阿里云恶意程序检测 -- 实践记录10.27 - TF-IDF模型调参 / 数据可视化
TF-IDF模型调参 1. 调TfidfVectorizer的参数 ngram_range, min_df, max_df: 上一篇博客调了ngram_range这个参数,得出了ngram_range ...
- 关于Git GUI克隆代码
1.首先需要使用Git GUI生成一个SSH秘钥并将其拷贝到远程(码云或者GitHub)账号下的SSH公钥中(以码云为例) 将上一步生成的SSH密钥拷贝到下面的码云的公钥中 2.拷贝下码云上代码的SS ...
- Linux设置文件权限和归属
前言:在Linux文件系统的安全模型中,为系统中的文件(或目录)赋予了两个属性:访问权限和文件所有者,简称为“权限”和“归属”.其中,访问权限包括读取.写入.可执行三种基本类型,归属包括属主(拥有该文 ...
- javaweb 使用页面模板CSS或者Js修改失效的解决办法(Tomcat缓存问题)
原因是:浏览器的自动缓存机制导致的. 浏览器会自动缓存静态文件以加快访问速度,但是这导致了他不会再从服务器端接收静态文档了,这就导致我在idea里面改的css和js文档,浏览器根本没下载下来. 所以解 ...
- 手写数字识别——基于LeNet-5卷积网络模型
在<手写数字识别——利用Keras高层API快速搭建并优化网络模型>一文中,我们搭建了全连接层网络,准确率达到0.98,但是这种网络的参数量达到了近24万个.本文将搭建LeNet-5网络, ...
- pillow 模块
pillow模块 图片处理 中文文档 安装 pip install Pillow 对图片旋转90度显示 from PIL import Image im=Image.open("t.jpg& ...
- 【巨杉数据库SequoiaDB】巨杉数据库 v5.0 Beta版 正式发布
2020年疫情的出现对众多企业运营造成了严重的影响.面对突发状况,巨杉利用长期积累的远程研发协作体系,仍然坚持进行技术创新,按照已有规划推进研发工作,正式推出了巨杉数据库(SequoiaDB) v ...
- 题解【AcWing1090】绿色通道
题面 题目要求出最长的空题段最短的长度,显然可以二分答案. 考虑如何 check. 设二分到的值是 \(x\),即最长的空题段长度至少为 \(x\). 其实整个 check 的过程可以看作一个 DP, ...
- ffmpeg rtp rtmp udp 推流命令
推组播 组播地址指的范围是224.0.0.0—239.255.255.255 ffmpeg -re -i chunwan.h264 -vcodec mpeg2video -f mpeg2video u ...
- Typecho的卡哇伊小猫咪小插件(Live2D猫咪插件)
之前看到一个博客,被它博客上的动态小猫咪给吸引了,这个纯粹就是一个在线撸猫的神器啊.但是在网上寻找一番,并没有找到合适的插件,或者说没有找到合适的模型,因此无奈之后,只能向该博主请教,在它写的博客上, ...