美文网首页
Django 学习简笔记

Django 学习简笔记

作者: lingmacker | 来源:发表于2019-07-27 21:44 被阅读0次

该笔记是在我自学 django 过程中做的简要笔记,使得自己在以后开发过程中更加方便的查看 django 的使用方法。


  1. 重写后台 from django.contrib.admin import AdminSite ← 继承
  2. 同一界面编辑关联数据 设置inlines属性 定义一个类:class PostInline(admin.StackedInline) inlines=[PostInline,]
  3. 抽取Admin基类
  4. 自定义过滤器:admin.SimpleListFilter ← 继承
  5. 日志:注册 → from django.contrib.admin.models import LogEntry
    list_display() 然后ok!

第二阶段学习

  1. 拓展user表,继承from django.contrib.auth.models import AbstractUser,
    设置里配置 AUTH_USER_MODEL = 'users.UserProfile'

  2. auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
    auto_now_add为添加时的时间,更新对象时不会有变动。

  3. 外键on_delete属性
    CASCADE:此值设置,是级联删除。
    PROTECT:此值设置,是会报完整性错误。
    SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
    SET_DEFAULT:此值设置,会把设置为外键的默认值。
    SET():此值设置,会调用外面的值,可以是一个函数。

  4. app合并为apps后,在setting里添加搜索路径,使得python可以找到app
    sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

  5. django admin 本地化配置

    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
    USE_TZ = True # 改为False 使数据库保存时,使用本地时间
    
  6. xadmin 安装后需要pyhon manage.py migrate

  7. 源码安装xadmin时,要选择分支为django2,运行pip install -r requirements.txt 安装依赖,复制目录下xadmin文件夹到项目的extra_apps里后,需要添加sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

  8. 配置static文件夹路径

    STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static')  # 指明static文件夹路径
    ]
    
  9. django model 自己指向自己

    models.ForeignKey('self', null=True, blank=True)
    
  10. 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
    
  11. django xadmin list_display高级用法

    list_display = ['model里定义的函数名']

    要自定义该字段的名字:fun_name.short_description = '自定义内容'

  12. 配置app的显示名称:在每个app下有个apps.py文件,在里面添加verbose_name = ' ' 属性和对应app下的init.py中添加default_app_config = 'app-name.apps.app-nameConfig'属性

  13. 重载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',)
    
  14. django实现验证码第三方库

    [djangp-simple-captcha](<https://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation>) 文档查看。
    
    `pip install  django-simple-captcha`
    
  15. 使用from django.contrib.auth.views import LogoutView, LoginView 这个类进行登录

    # 在setting里设置这两个属性
    LOGIN_REDIRECT_URL = 'index'
    LOGOUT_REDIRECT_URL = 'login'
    
  16. 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])
     
    
  17. 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;'}
        }
    }
    ​```
    
  18. 配置上传文件的路径

    ​```python
    # 上传文件夹配置
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    ​```
    
  19. 配置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})
      
    
  1. django2 path路由配置

    - str,匹配除了路径分隔符(`/`)之外的非空字符串,这是默认的形式
    - int,匹配正整数,包含0。
    - slug,匹配字母、数字以及横杠、下划线组成的字符串。
    - uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    - path,匹配任何非空字符串,包含了路径分隔符
    
  2. django开源分页库

    [django-pure-pagination](<https://github.com/jamespacileo/django-pure-pagination>)
    
    `pip install django-pure-pagination`
    
  3. 手动安装xadmin

    1)去git上下载xadmin,解压复制目录下的xadmin文件夹到项目中

    2)安装xadmin的requirments.txt下的依赖包

    3)在setting中设置sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))

相关文章

网友评论

      本文标题:Django 学习简笔记

      本文链接:https://www.haomeiwen.com/subject/jcryrctx.html