什么是反射 反射的概念是由 Smith 在 1982 年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省) Python 面向对象中的反射 通过字符串的形式操作对象的属性 Python...This is done by calling getattr(obj, name) and catching AttributeError. """ pass 返回对象是否具有具有给定名称的属性...delattr(x, 'y') is equivalent to ``del x.y'' """ pass 从指定对象中删除指定属性 等价写法 del x.y delattr(x,...hasattr(blog, "name")) # 实例对象-实例属性 print(hasattr(blog, "sum")) # 实例对象-类属性 print(hasattr...__dict__) # 输出结果 {'name': '小菠萝'} 反射本模块的成员 除了可以检测类中有没有某个属性、方法,还可以用来检测某个模块下有没有方法、类、变量 sums = 0 def
: •admin 后台本身的页面元素是已经汉化了的,但是我们自己的 blog 应用,以及 Post、Category、Tag 在页面中显示却是英文的,以及发布文章的时候,表单各字段的 label 也是英文的...要修改 app 在 admin 后台的显示名字,添加 verbose_name 属性。...然后就是修改 post 的表单的 label,label 由定义在 model 中的 Field 名转换二来,所以在 Field 中修改。...此前我们在 blog/admin.py 中定义了一个 PostAdmin 来配置 Post 在 admin 后台的一些展现形式。list_display 属性控制 Post 列表页展示的字段。...此外还有一个 fields 属性,则用来控制表单展现的字段,正好符合我们的需求: class PostAdmin(admin.ModelAdmin): list_display = ['title
from blog.models import Post, Category, Tag # 在应用目录下的 admin.py 文件中,对创建的模型进行注册,可以一起用列表注册,也可以分开注册 admin.site.register...admin 的显示内容,可以通过如下进行定制 @admin.register(Post) class PostAdmin(admin.ModelAdmin) list_display = ['title...= ['title', 'author'] # 排除一些不想被编辑的 fields, 没有在列表的不可被编辑 fields = ('title', 'author')...提交表单错误 不存在对应模型(POST 方式) 1.在 forms.py 中创建表单 # 假设有个信息反馈的表单 class ContractForm(forms.Form): subject...提交反馈错误 类似搜索的表单(GET) 1.创建表单视图 def search(request): # 获取到用户提交的搜索关键词,字典的键值同模版中的 name 属性值 q = request.GET.get
在views.host中需要指定一个形式参数来接受(\d+)\ 的值 def user_list(request,id): return HttpResponse(id) \^host_list/(\.../', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), ('^(?...cbvpost') URL反相解析 在我们的Django项目中,我们经常会遇到要在视图中返回一个重定向到具体URL的响应,或者要将具体的URL地址嵌入到HTML页面中(如:a标签的href属性等)的情况...就是用反向解析的办法 应用范围 模板中的超链接 视图中的重定向 使用方法 namespace和name属性 定义url时,需要为include定义namespace属性,为url定义name属性 使用时...模板中超链接步骤 1)在项目urls.py中为include定义namespace属性。
在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些提示语句...试图访问一个对象没有的属性,比如myInst.foo,但是myInst没有属性foo ValueError 传入一个调用者不期望的值,即使值的类型是正确的 TypeError 传入对象类型与要求的不符合...AttributeError:试图访问一个对象没有的属性,比如myInst.foo,但是myInst没有属性foo >>> class myClass(): ... ...上面的代码中,显然list和dict都是有错误的,但执行程序时,只返回list的异常信息,这说明,try语句在执行时是顺序执行的,并非是循环执行,即捕捉到list的异常后,并不会继续执行下一个语句,只有等异常解除时才会继续往下执行...当然except后面可以不加任何异常类型,此时,将会捕捉任何前面没有捕捉到的异常,这适合于一些未可预见的异常情况,如上面的程序,list异常和dict异常是我们可预料的,但假如这时加入一个不可预料的异常时
项目:基于某些设置项的Django安装结果; 应用程序:模型,视图,模版,URL的组合 应用程序和框架进行交互,并提供特定的功能,并可以在不同的项目中加以复用。...return self.title 激活应用程序 INSTALLED_APPS中添加'blog.apps.BlogConfig' INSTALLED_APPS = [ 'django.contrib.admin...admin 管理站点中添加模型 在blog/admin.py文件下添加 from django.contrib import admin from .models import Post admin.site.register...(Post) # admin页面定制展示 @admin.register(Post) class PostAdmin(admin.ModelAdmin): list_display = ('title...定制展示 增加定制内容 右侧过滤栏list_filter 搜索栏search_fields 导航连接date_hierarchy 排序ordering @admin.register(Post) class
(即action路径),而非模板映射路径; 由于本节控制器中没有专用于登陆成功的控制器,因此此处没有使用转发,而是通过模板映射。...前后端的数据交互 (1)控制器的参数对应表单提交的参数即可自动实现注入;若为model,也能实现自动注入 ①使用总结:控制器中形参的类型,在表单中直接提交形参类型的属性即可。...1)可以在model中的属性上增加@JsonAlias实现别名 2)在model属性上增加@JsonProperty实现唯一标准名(与前端提交的相比较) ⑤如果前端传递的不是json,又需要将其封装为model...更新(添加)标签请求 post /tags{id} admin/tags 在页面获得id,通过id进行更新 * 5....copy 给数据库查到的tmp,则blog中的null会覆盖tmp原来有数据的字段 //因此,要忽略掉blog中属性值为空的字段 BeanUtils.copyProperties
然后我们在settings中,配置数据库相关的参数,如果使用自带的sqlite,不需要修改。... } } 再编辑blog目录下的models.py文件,也就是MTV中的M。...它的作用相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件 再输入命令: python...user_list = models.Users.objects.all() print(type(user_list)) # 将对象传给模板index.html return ...#} {% if user_list %} 数据展示 {#border-collapse属性显示细线表格#} <table border="1"
目录 BBS项目(二) ORM 创建相关表 表模型 修改admin样式 Simple-UI 注册表添加数据 注册forms类编写 注册功能前端搭建 头像实时显示功能实现 BBS项目(二) 可以在本地写或虚拟环境...admin.site.register(models.Article) admin.site.register(models.Blog) admin.site.register(models.UserInfo...App01Config(AppConfig): name = 'blog' verbose_name = '博客管理' # 如果想改表名为中文在后台显示,只需在类中添加Meta...function () { {#获取上传头像文件#} var myfile = $(this)[0].files[0] {# 借助文件阅读器把文件读到这个对象中...,把文件读到这个对象中 let filereader=new FileReader() filereader.readAsDataURL(myfile)
( username="admin", email="admin@hellogithub.com", password="admin" ) cate...创建评论成功后返回的状态码应该是 201,接口返回的数据在 response.data 属性中,我们对接口返回的状态码和部分数据进行了断言,确保符合预期的结果。...,序列化器中的任何序列化字段均可以通过直接访问 context 属性而间接访问到 _context 属性,从而拿到 request 对象。...但是在单元测试中,可能没有这样的视图函数调用,因此 _context 的设置并不会自动进行,需要我们模拟视图函数调用时的行为,手动进行设置。...主要包括 2 点: 构造 HTTP 请求对象 request。 设置 _context 属性的值。
我们前面在视图函数 index 里给模板传了一个 post_list 变量,它里面包含着从数据库中取出的文章列表数据。...你可能不太理解模板中的 post 和 post_list 是什么。...post_list 是一个 QuerySet(类似于一个列表的数据结构),其中每一项都是之前定义在 blog\models.py 中的 Post 类的实例,且每个实例分别对应着数据库中每篇文章的记录。...因此我们循环遍历 post_list ,每一次遍历的结果都保存在 post变量里。所以我们使用模板变量来显示 post 的属性值。...例如这里的 {{ post.pk }}(pk 是 primary key 的缩写,即 post 对应于数据库中记录的 id 值,该属性尽管我们没有显示定义,但是 Django 会自动为我们添加)。
将一些指令操作记录下来,便于查询和使用 登录 [root@logs ~]# mongo -u loguser -p log123456 --authenticationDatabase admin...", "Date" : ISODate("2015-02-11T03:12:03.061Z") } 插入 --插入文档对象 > db.blog.insert(post)...Post", "Date" : ISODate("2015-02-11T03:18:10.509Z"), "comments" : [ ] } 删除 --删除title限定条件的文档...objects in collection foo db.foo.find( { a : 1 } ) list objects in foo where a == 1 ...display on shell exit quit the mongo shell --特殊集合名处理 如果集合名恰好是和数据库类的一个属性名相同
不知道现在修复没有。不过这不重要了,有了xadmin,自带的admin就没有用武之地了。...第二项配置就是url的配置,这时的注意事项是,你要去掉admin的url,加入xadmin的url,这意味着 你在项目其他地方使用到的admin url的reverse代码需要修改,另外xadmin的更新和...' url_edit = urlresolvers.reverse('admin:blog_post_change', args=(obj.id,)) return u'...比如我自己的blog,我后台编辑的是restructure格式的文本,在保存时会转成html存到数据。...obj.content_html = obj.content_html.replace('[/cc]', '') obj.save() 因为xadmin虽然在属性上兼容了
urlpatterns = [ url(r'^admin/', admin.site.urls), # include 作用:在 django 匹配 url 时候匹配完 blog/...文件夹中找到相应的模版,在 TEMPLATES 中的 DIRS 列表中加入如下代码 'DIRS': [os.path.join(BASE_DIR, 'templates')], 2.在 templates...文件夹下再创建放应用模版的文件夹 例如 blog ,然后在 blog 创建 index.html 作为 index 视图的模版 <!...reversed%} 执行循环之前通常先检测列表的大小,因此 for 标签支持一个可选的 {% empty %} 分句 每个 {% for %} 循环里有一个称为 forloop 的模板变量,这个变量存在一些表示循环进度信息的属性...{% endfor%} 静态文件处理 在应用目录下创建 static 文件夹,可以将常用的 css 文件,js 文件等放入该文件夹 在需要引用静态文件的模版中做如下处理
将一些指令操作记录下来,便于查询和使用 登录 [root@logs ~]# mongo -u loguser -p log123456 –authenticationDatabase admin MongoDB...: “Here is my blog Post.”, “Date” : ISODate(“2015-02-11T03:12:03.061Z”) } 插入 –插入文档对象 > db.blog.insert...–删除title限定条件的文档 > db.blog.remove({title:”You Blog Post”}) > db.blog.find() { “_id” : ObjectId(“54dac88dc956bbcbefa8151c...objects in collection foo db.foo.find( { a : 1 } ) list objects in foo where a == 1...display on shell exit quit the mongo shell –特殊集合名处理 如果集合名恰好是和数据库类的一个属性名相同
删除 blog\tests.py 文件,然后在 blog 应用下创建一个 tests 包,再创建各个单元测试模块: blog\ tests\ __init__.py test_smoke.py...(self.post.modified_time > old_post_modified_time) 这个 refresh_from_db 方法将刷新对象 self.post 的值为数据库中的最新值,...渲染的模板为 index.html 访问的分类有文章,则响应中应该包含系列关键的模板变量,post_list、is_paginated、page_obj,post_list 文章数量为1,因为我们的测试数据中这个分类下只有一篇文章..., self.cate1) reverse('admin:blog_post_add') 获取 admin 管理添加博客文章的 URL,django admin 添加文章的视图函数名为 admin:blog_post_add...我们调用了模板引擎的底层 API 来渲染模板,视图函数会渲染模板,返回响应,但是我们没有看到这个过程,是因为 django 帮我们在背后的调用了这个过程。
注意这里注册的是 CommentsConfig 类,在 博客从“裸奔”到“有皮肤”[1] 中曾经讲过如何对应用做一些初始化配置,例如让 blog 应用在 django 的 admin 后台显示中文名字。...注意到表单的定义中并没有定义 name、email、url 等属性,那它们是哪里来的呢?...post = get_object_or_404(Post, pk=post_pk) # django 将用户提交的数据封装在 request.POST 中,这是一个类字典对象。...紧接着传入消息的内容,最后 extra_tags 给这条消息打上额外的标签,标签值可以在展示消息时使用,比如这里我们会把这个值用在模板中的 HTML 标签的 class 属性,增加样式。...但既然我们已经有了一个 Post 模型的实例 post(它对应的是 Post 在数据库中的一条记录),那么获取和 post 关联的评论列表有一个简单方法,即调用它的 xxx_set 属性来获取一个类似于
= 'blog' urlpatterns = [ path('', views.post_list, name='post_list'), # 列表页的url规则 path('<int...如,博客前台要展示的数据肯定是已发布的,如果每次取已发布的数据都要通过过滤条件获取,显得很繁琐。可以通过自定义管理器,将已发布的文章封装成文章类的一个属性。...()就能获取所有已发布的文章 在view中写业务逻辑 mysite/blog/views.py from django.shortcuts import render, get_object_or_404.../post/detail.html', {'post': post}) 在view中指定了list和detail的html文件路径,我们需要在相应位置创建html文件...{% endfor %} {% endblock %} list.html继承了base.html, 并将内容注入到base.html中id为content的div中 detail.html {% extends
recent_post_list 模板变量中,之后就可以通过 for 循环来循环显示文章列表数据了,这和我们在写首页视图时是一样的。...由于日期列表中的元素为 Python 的 date 对象,因此可以通过其 year 和 month 属性分别获取年和月的信息,{{ date.year }} 年 {{ date.month...注意这里 created_time 是 Python 的 date 对象,其有一个 year 和 month 属性,我们在 页面侧边栏:使用自定义模板标签 使用过这个属性。...if request.method == 'POST': # 用户提交的数据存在 request.POST 中,这是一个类字典对象。...但既然我们已经有了一个 Post 模型的实例 post(它对应的是 Post 在数据库中的一条记录),那么获取和 post 关联的评论列表有一个简单方法,即调用它的 xxx_set 属性来获取一个类似于
,与数据库中的属性值基本保持一致,实现set和get的方法。...首页-最热文章 在ms_article表中的view_counts表示浏览数量,越多表示越火热 4.2.1 接口说明 接口url:/articles/hot 请求方式:POST 请求参数: 参数名称...完成保存用户登录信息功能 使用ThreadLocal替代Session的好处: 可以在同一线程中很方便的获取用户信息,不需要频繁的传递session对象。...具体实现流程: 在登录业务代码中,当用户登录成功时,生成一个登录凭证存储到redis中, 将凭证中的字符串保存在cookie中返回给客户端。...如果想取消强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样可以使JVM在合适的时间就会回收该对象。 弱引用,JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。
领取专属 10元无门槛券
手把手带您无忧上云