一、admin的介绍
admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理。默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功能还需要定制,比如搜索功能。
二、注册model类到admin的两种方式:
设置中文: 在settings文件中
LANGUAGE_CODE = 'cn-hans'
在admin.py文件中进行注册,以及一些自定制。
<1> 使用register的方法
from blog(应用名) import models # 导入models
admin.site.register(models.Book) # 写上对应的表名
admin.site.register(models.Author)
admin.site.register(models.Publish)
<2> 使用register的装饰器
@admin.register(models.Book)
三、进行用户的注册
运行下面的命令、按照提示完成注册。
python manage.py createsuperuser
四、一些自定制属性和样式
在admin.py进行自定制
class BookAdmin(admin.ModelAdmin): # 类的名字一般是 表名+Admin, 需要继承admin.ModelAdmin。
list_display = ("id", "name", "price") # 设置展示的字段。 后面参数跟字段名。
list_editable = ("name", "price") # 设置哪些字段可以进行编辑。 后面参数跟字段名。
filter_horizontal = ("auth",) # 水平条件过滤, 后面设置哪个字段,一般是多对多的外键
filter_vertical = ("auth",) # 纵向条件过滤, 后面设置哪个字段,一般是多对多的外键
list_per_page = 2 # 设置每页展示的数据条数。
search_fields = ("name", "id", "price") # 设置搜索域按哪些字段进行搜索。
list_filter = ("publish__city", "price") # 右侧的过滤器,后面跟要过滤的字段。
ordering = ("price", "id") # 设置按照哪个字段进行排序。
fieldsets = [("None",{"fields":["name"]}), ("price_information",
{'fields':["price","author","publish","auth"], "classes":['collapse']})]
# 在添加值时,None后面显示默认的显示字段名, 后面是详细信息展示的字段。 price_information 是一个名字,classes 是展示的样式。
可以在model里面进行一些配置来改变admin。
class Book(models.Model):
name = models.CharField(max_length=20, verbose_name="姓名") verbose_name 设置字段名展示的名字.
Session
request.session["name"] = value # 对session进行赋值
del request.session["name"] 删除session
清空session request.session.clear()
request.session.get("name",None) # 取对应session的值,没有就是None
Cookie
ret = redirect("/blog/login") # 通过redirect的返回值进行设置cookie
ret.set_cookie("bili", name, max_age=10) # key,value,最大时限(s)
return ret
request.Cookie.get("name",None) # 获取cookie值,如果没有获取到就是None
ret.set_cookie("bili",name,max_age=10,expires=datetime.datetime.utcnow()+datetime.timedelta(days=3)) # expires 也是设置cookie的最大值,可以在现有的基础时间上 加上 一个天数
FBV模式和CBV模式:
FBV模式:在url的分配中,一个url对应一个函数的模式,称为FBV模式。
CBV模式:在url的分配中,一个url对应一个类的模式,称为CBV模式。
url部分:
from blog import views
urlpatterns = [
url(r'call/$', views.Animal.as_view()) # 通过打点的方式调用 类名+as_view()
]
---------------------------------------------------------
views部分:
from django.views import View
# 需要继承View类
class Animal(View):
# 当有请求进来时,先执行dispatch方法,然后再根据请求的方式,进行反射找到类的方法,执行不同的方法, 可以在这个方法记录日志。
# 当数据返回给用户是也会经过dispatch方法。
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs) # 需要返回一个父类的方法,
def get(self, request): # get请求 根据请求头的request_method进行匹配
return HttpResponse("get")
def post(self, request): # post请求
return HttpResponse("post")