Django学习日记20

1.DateField和DataTimeField
[1]auto_now_add:配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
[2]auto_now:配置auto_now=True,每次更新数据记录的时候会更新该字段。

2.db_table
解析:ORM在数据库中的表名默认是app_类名,可以通过db_table重写表名。

3.django.http.request
解析:

self.GET = QueryDict(mutable=True)
self.POST = QueryDict(mutable=True)
self.COOKIES = {}
self.META = {}
self.FILES = MultiValueDict()
self.path = ''
self.path_info = ''
self.method = None
self.resolver_match = None
self._post_parse_error = False
self.content_type = None
self.content_params = None

4.手工设置模型序列化
解析:

from django.http import HttpResponse
import json
return HttpResponse(json.dumps(json_list), content_type="application/json")

说明:from django.forms.models import model_to_dict

5.Django项目和应用区别
解析:应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。

6.何时使用include()
解析:
[1]当包括其它URL模式时应该总是使用include(),admin.site.urls是唯一例外。
[2]函数include()允许引用其它URLconfs。每当Django遇到include()时,它会截断与此项匹配的URL的部分,并将剩余的字符串发送到URLconf以供进一步处理。

7.path()方法
解析:函数path()具有四个参数,两个必须参数:route和view,两个可选参数:kwargs和name。如下所示:
[1]route:一个匹配URL的准则[类似正则表达式]。当Django响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
[2]view:当Django找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个HttpRequest对象作为第一个参数,被捕获的参数以关键字参数的形式传入。
[3]kwargs:任意个关键字参数可以作为一个字典传递给目标视图函数。
[4]name:为URL取名能使在Django的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许只改一个文件就能全局地修改某个URL模式。

8.admin注册用户信息
解析:

from django.contrib import admin
from .models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
    pass
admin.site.register(UserProfile, UserProfileAdmin)

9.ModelAdmin
解析:
[1]list_display:置列表可显示的字段
[2]list_filter:设置过滤选项
[3]list_per_page:每页显示条目数
[4]list_editable:设置可编辑字段
[5]date_hierarchy:按日期月份筛选
[6]ordering:按某个字段排序
[7]list_display_links:设置带链接的字段
[8]search_fields:设置可以搜索的字段

10.xadmin注册用户信息
解析:

import xadmin
from .models import UserProfile
class UserProfileAdmin(object):
    pass
xadmin.site.register(UserProfile, UserProfileAdmin)

11.django-crispy-forms
解析:django-crispy-forms是对Django Form在HTML页面呈现方式进行管理的一个第三方插件。

12.Django静态文件目录
解析:

STATIC_URL = '/static/'
STATICFILES_DIRS=[
 os.path.join(BASE_DIR, "static"),
]

13.django.views.generic.base.TemplateView
解析:呈现给定模板,其中包含在URL中捕获的参数的上下文。

14.django.views.generic.base.RedirectView
解析:重定向到给定的URL。

15.TemplateView.as_view()
解析:
[1]如果想省略view层,直接在url层返回页面,则在本来要写view函数位置的地方写:TemplateView.as_view(template_name=“要渲染的模板文件”)
[2]如果想要给模板传参数的话,需要自己写一个类,继承TemplateView类,并重写他的get_context_data(self,**kwargs)方法。

16.StreamingHttpResponse
解析:from django.http import StreamingHttpResponse它将文件内容进行流式传输,数据量大可以用这个方法。
说明:response[‘Content-Type’] = ‘application/octet-stream’

17.HttpResponse、render、redirect
解析:from django.shortcuts import HttpResponse, render, redirect。如下所示:
[1]HttpResponse:它是作用是内部传入一个字符串参数,然后发给浏览器。
[2]render:render方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。它的作用就是将数据填充进模板文件,最后把结果返回给浏览器。返回一个渲染后的HttpResponse对象。
[3]redirect:接受一个URL参数,表示让浏览器跳转去指定的URL。

18.Django中常规登录和退出函数用法
解析:一般不需要自己写登录/登出函数,认证系统提供一系例视图用来处理登录和登出:

from django.contrib.auth.views import login, logout
urlpatterns = patterns('',
  # existing patterns here...
  (r'^accounts/login/$', login),
  (r'^accounts/logout/$', logout),
)

19.配置CustomBackend类
解析:

class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None
# Application definition
AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
)

20.Django中的forms功能
解析:
[1]模板中表单的渲染
[2]数据的验证工作
[3]可以定制更复杂的验证工作

21.make_password和check_password
解析:

from django.contrib.auth.hashers import make_password, check_password
text = "www.baidu.com"
password = make_password(text, None, 'pbkdf2_sha1')
result = check_password(text, password)

22.通过邮箱验证码激活用户
解析:

class AciveUserView(View):
    def get(self, request, active_code):
        all_records = EmailVerifyRecord.objects.filter(code=active_code)
        if all_records:
            for record in all_records:
                email = record.email
                user = UserProfile.objects.get(email=email)
                user.is_active = True
                user.save()
        else:
            return render(request, "active_fail.html")
        return render(request, "login.html")

23.Django发送邮件–配置相关参数
解析:EMAIL_USE_SSL和EMAIL_USE_TLS是互斥的,即只能有一个为True。DEFAULT_FROM_EMAIL还可以写成这样:DEFAULT_FROM_EMAIL='tuweizhong <[email protected]>'。如下所示:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = False
EMAIL_HOST = 'smtp.tuweizhong.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'xxxx'
DEFAULT_FROM_EMAIL = '[email protected]'

或者

EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com'  # 如果是163改成smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = '[email protected]' # 帐号
EMAIL_HOST_PASSWORD = 'p@ssw0rd'  # 授权码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

24.send_mail参数
解析:
[1]subject:主题
[2]message:邮件文本内容
[3]from_email:发送者
[4]recipient_list:收件人列表
[5]auth_user:邮箱服务器认证用户
[6]auth_password:认证密码
[7]html_message:html邮件内容

25.设置QQ邮箱
解析:通过Django Email模块发送邮件,首先要保持POP3和SMTP服务器处于开启状态。进入QQ邮箱→设置→账户→POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。

参考文献:
[1]django.http.request:https://docs.djangoproject.com/zh-hans/2.0/_modules/django/http/request/
[2]django-crispy-forms:https://pypi.org/project/django-crispy-forms/1.4.0/

发布了364 篇原创文章 · 获赞 422 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/shengshengwang/article/details/104197395
今日推荐