内容简介:Django自带了强大的名为为了管理具体的某张表,我们需要在app下的
Django自带了强大的名为 admin
的后台管理功能,app名称为 django.contrib.admin
,它同时依赖了 django.contrib.auth
认证系统和 django.contrib.sessions
系统,当然,即使不用admin,后面两者都建议加上,不用重复造轮子。
-
为了使用它,我们需要先使用
migrate
功能去创建相应的数据库表,直接执行python manage.py makemigrations && python manage.py migrate
即可。运行程序后,直接访问http://127.0.0.1:8000/admin/
就能访问admin了(一般admin的路由都是定义好了的,在urls.py
中有url(r'^admin/', admin.site.urls),
) -
我们需要先创建一个超级管理员
python manage.py createsuperuser
,按照提示输入用户名密码即可用来登录了 -
如果要让字段非必填,需要在定义model字段的时候就加上
blank=True
参数 -
修改超级管理员密码可以这样做:
# python manage.py shell from django.contrib.auth.models import User user =User.objects.get(username='admin') user.set_password('new_password') user.save()
使用admin管理数据表
为了管理具体的某张表,我们需要在app下的 admin.py
文件里面注册相应的 model
:
from django import forms from django.contrib import admin from django.contrib.auth.models import Group from django.contrib.auth.forms import ReadOnlyPasswordHashField from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from myapp.models import PostModel class PostAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'created_at') # 定义后台列表显示时需要显示哪些字段 list_per_page = 50 # 定义后台列表显示时每页显示数量 list_filter = ('id', 'name', ) # 定义后台列表显示时能够筛选的字段(会列出所有的可筛选值) search_fields = ('username', 'email',) # 指定能搜索哪些字段 list_editable = ['field'] # 定义可以直接在列表页进行更改的字段 fx_fields = ('user_id', ) # 定义列表页显示的外键字段,会直接显示关联的值 filter_horizontal = ('posts') # 显示多对多字段 readonly_fields = ('username') # 设置只读字段,不允许更改 ordering = ('-created_at', ) # 定义列表显示的顺序,负号表示降序 fieldsets = ( # 对字段进行分类设置,前端会分开显示 (None, {'fields': ('username', 'password', )}), ('Personal info', {'fields': ('firstname', )}), ('Permissions', {'fields': ('groups', )}), ) add_fieldsets = ( # 定义添加数据时需要填写哪些字段 (None, {'classes': ('wide',), 'fields': ('name', 'content' )}), ) def save_model(self, request, obj, form, change): """定义保存对象的方式,可以在这里做一些其他的事情。这个方法不需要返回任何东西,如果要捕获其中的错误或者重定向,最好是设置一个对象字段,然后在response_change或response_add中进行处理""" self.has_error = True self.message_user(request, "友好地给用户显示错误信息", level=logging.ERROR) super().save_model(request, obj, form, change) return def response_change(self, request, obj): """改变记录之后的响应操作,可以捕获错误并返回应该返回的消息""" if self.has_error: return HttpResponseRedirect(request.path) else: return super().response_chage(request, obj) def respopnse_add(self, request, obj, post_url_continue=None): """添加记录之后的响应操作""" return super().response_add(request, obj, post_url_continue) admin.site.register(PostModel, PostAdmin) # 注册管理模型 admin.site.site_header = '后台页面的header' admin.site.site_title = '后台的title'
自定义admin管理数据创建及修改表单
class MyModelCreationForm(forms.ModelForm): """自定义创建表单""" field_name = forms.CharField(label='field_name') class Meta: model = MyModel fields = ('email', 'field2') exclude = ('created_at', ) # 排除某些字段不用在后台管理 class MyModelChangeForm(forms.ModelForm): """自定义修改表单""" password = ReadOnlyPasswordHashField(label= ("Password"), help_text= ("Raw passwords are not stored, so there is no way to see this user's password, but you can change the password using <a href=\"../password/\">this form</a>.")) # 如果要修改密码字段,我们需要这样提示 def clean_password(self): return self.initial["password"] class UserAdmin(BaseUserAdmin): # 用户管理需要继承单独的Admin form = UserChangeForm # 指定修改表单 add_form = UserCreationForm # 指定创建表单
Django-CKeditor富文本编辑使用
django-ckeditor
扩展,使用简单,前端也漂亮
-
安装
pip install django-ckeditor
,如果要在富文本里添加图片还需要pip install pillow
-
注册应用,
INSTALLED_APPS
里添加ckeditor
,图片还需要添加ckeditor_uploader
-
如果要使用自定义的文件存储,例如七牛云存储,可以参考这篇文章进行设置
-
如果要处理图片,还需要在
settings.py
里面添加如下设置:# 前面两个可能已经设置了,是存放用户上传文件的地方 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') CKEDITOR_UPLOAD_PATH = 'upload/' CKEDITOR_CONFIGS = { # 添加个性化的配置 'default': { 'image_previewText':' ', # 替换图片显示区域那一串搞不懂的字符串 'tabSpaces': 4, } }
另外还需要添加一个路由用于上传请求
from django.conf.urls.static import static urlpatterns = [ ... path('ckeditor/', include('ckeditor_uploader.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
模型里面对应的字段设置
from ckeditor.fields import RichTextField class Post(models.Model): content = RichTextField() content2 = RichTextUploadingField() # 带有上传图片功能的富文本编辑
Django-CKeditor
目前还不支持粘贴的时候自动上传图片,我的做法是在对象的 Admin
的 save_model
方法里面对没有转换为内链的外部链接图片通过 requests
抓取下来再上传到七牛云,以达到自动替换的效果。这只是最简单的做法,当然,最好的做法还是在前端监听粘贴事件,实时上传。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 我做编辑器这些年:钉钉文档编辑器的前世今生
- 有爱编辑器 1.7.1 发布,mysql 编辑器 GUI
- 小书匠编辑器 6.0.0 发布,好用的 Markdown 编辑器
- 小书匠编辑器 6.0.0 发布,好用的 Markdown 编辑器
- 10个最佳富文本编辑器
- 在线代码编辑器利器-codeMirror
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通JavaScript+jQuery
曾顺 编著 / 人民邮电出版社 / 2008-9 / 59.00元
随着Ajax技术的不断风靡,其核心技术JavaScript越来越受到人们的关注,各种JavaScript的框架层出不穷。jQuery作为JavaScript框架的优秀代表,为广大开发者提供了诸多便利。 本书从介绍JavaScript的基础知识开始,围绕标准Web的各项技术予以展开,通过大量实例对JavaScript、CSS、DOM、Ajax等 Web关键技术进行深入浅出的分析,主要内容包括J......一起来看看 《精通JavaScript+jQuery》 这本书的介绍吧!