Django 学习简笔记

该笔记是在我自学 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'))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342