该笔记是在我自学 django 过程中做的简要笔记,使得自己在以后开发过程中更加方便的查看 django 的使用方法。
- 重写后台 from django.contrib.admin import AdminSite ← 继承
- 同一界面编辑关联数据 设置inlines属性 定义一个类:class PostInline(admin.StackedInline) inlines=[PostInline,]
- 抽取Admin基类
- 自定义过滤器:admin.SimpleListFilter ← 继承
- 日志:注册 → from django.contrib.admin.models import LogEntry
list_display() 然后ok!
第二阶段学习
拓展user表,继承from django.contrib.auth.models import AbstractUser,
设置里配置AUTH_USER_MODEL = 'users.UserProfile'
auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
auto_now_add为添加时的时间,更新对象时不会有变动。外键on_delete属性
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。app合并为apps后,在setting里添加搜索路径,使得python可以找到app
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
-
django admin 本地化配置
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_TZ = True # 改为False 使数据库保存时,使用本地时间
xadmin 安装后需要
pyhon manage.py migrate
源码安装xadmin时,要选择分支为django2,运行pip install -r requirements.txt 安装依赖,复制目录下xadmin文件夹到项目的extra_apps里后,需要添加
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
-
配置static文件夹路径
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') # 指明static文件夹路径 ]
-
django model 自己指向自己
models.ForeignKey('self', null=True, blank=True)
-
Xadmin管理器ModelAdmin的API
class ModelAdmin(object): list_display = [''] # 展示的字段 list_display_links = [''] # 使展示的字段变成链接,点击可以修改改条记录 search_fields = [''] # 可以用作搜索的字段 list_filter = [''] # 设置筛选字段 exclude = [''] # 定义模型添加界面不需要手动添加的字段 list_filter = ['course__name'] # 外键作为过滤器时,需要加两条下划线和其属性名来声明搜索值 model_icon = '' # 配置后台里model的图标,使用的是Awesome图标库 ordering = [''] # 配置后台显示按照哪些字段排序 readonly_fields = [''] # 配置只读字段 relfield_style = 'fk-ajax' # 当有外键指向当前model时,会以ajax方式加载 """ class ModelNameInline(object): model = ModelName extra = int(nums) # int值 """ inlines = [ModelNameInline] # 在本model中添加其它model list_editable = [''] # 配置在列表页可以编辑的字段 refresh = [int, int] # 设置自动刷新间隔int秒 def queryset(self): # 重载queryset方法,比如只显示当前用户添加的信息 pass def save_models(self): # 新增或修改该model是需要额外做的逻辑 pass
xadmin设置: @xadmin.sites.register(views.BaseAdminView) # 注册设置 class BaseSetting(object): enable_themes = True # 启用主题更换功能 use_bootswatch = True @xadmin.sites.register(views.CommAdminView) # 注册设置 class GlobalSetting(object): site_title = '慕学在线管理系统' # admin里左上角的文字 site_footer = '慕学在线网' # admin底部文字 menu_style = 'accordion' # 收起左边菜单app
-
django xadmin list_display高级用法
list_display = ['model里定义的函数名']
要自定义该字段的名字:fun_name.short_description = '自定义内容'
配置app的显示名称:在每个app下有个apps.py文件,在里面添加verbose_name = ' ' 属性和对应app下的init.py中添加
default_app_config = 'app-name.apps.app-nameConfig'
属性-
重载auth认证方法(使得可以使用Email和username登录)
1)在setting中设置一个属性:
AUTHENTICATION_BACKENDS = ('类名', )
,2)然后继承该类:
from django.contrib.auth.backends import ModelBackend
,重写 authenticate 方法。# 重写后台认证方法,可以使用户名或邮箱都可以登录 class CustomBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): try: user = User.objects.get(Q(username=username) | Q(email=username)) if user.check_password(password): return user except User.DoesNotExist: return None # 在设置里配置 AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',)
-
django实现验证码第三方库
[djangp-simple-captcha](<https://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation>) 文档查看。 `pip install django-simple-captcha`
-
使用
from django.contrib.auth.views import LogoutView, LoginView
这个类进行登录# 在setting里设置这两个属性 LOGIN_REDIRECT_URL = 'index' LOGOUT_REDIRECT_URL = 'login'
-
django实现发送邮件
使用
from django.core.mail import send_mail
函数,并在setting中做以下设置EMAIL_HOST = 'smtp.sina.com' EMAIL_PORT = 25 EMAIL_HOST_USER = '@sina.com' EMAIL_HOST_PASSWORD = 'password' EMAIL_FROM = 'xxxx@sina.com' EMAIL_USE_TLS = False # 调用 send_status = send_mail(email_title, email_body, EMAIL_FROM, [email_to])
-
django mysql数据库配置
```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'database_name', 'USER': 'username', 'PASSWORD': 'passwd', 'HOST': 'host', # 配置第三方登录插件需要这个设置 'OPTIONS': {'init_command': 'SET storage_engine=INNODB;'} } } ```
-
配置上传文件的路径
```python # 上传文件夹配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') ```
-
配置django templates 的上下文处理器
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.media' # 新添加的 ], }, }, ]
这样配置可以在模板中可以读取
MEDIA_URL
,如{{ MEDIA_URL }}{{ m_obj.image.url }}
。或者在模板里直接使用model_object.image.url直接可以获取url。
如果要在xadmin的修改界面查看图片,需要设置以下url
# django2.0 from *ProjectName*.settings import MEDIA_ROOT from django.views.static import serve path('media/<path:path>/', serve, {"document_root": MEDIA_ROOT}) # django1.0 from *ProjectName*.settings import MEDIA_ROOT from django.views.static import serve url(r'^media/(?P<path>.*)$', server, {"document_root": MEDIA_ROOT})
-
django2 path路由配置
- str,匹配除了路径分隔符(`/`)之外的非空字符串,这是默认的形式 - int,匹配正整数,包含0。 - slug,匹配字母、数字以及横杠、下划线组成的字符串。 - uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。 - path,匹配任何非空字符串,包含了路径分隔符
-
django开源分页库
[django-pure-pagination](<https://github.com/jamespacileo/django-pure-pagination>) `pip install django-pure-pagination`
-
手动安装xadmin
1)去git上下载xadmin,解压复制目录下的xadmin文件夹到项目中
2)安装xadmin的requirments.txt下的依赖包
3)在setting中设置sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))