知识积累

一、安装

1、官网及参考文档

官网

http://www.djangoproject.com

中文文档

https://yiyibooks.cn/

http://djangobook.py3k.cn/

2.安装及卸载

在线安装:

pip3 install django或者指定版本pip3 install django==1.11.8

离线安装

$ tar -xvf Django-1.11.8.tar.gz

$ cd Django-1.11.8

$ sudo python3 setup.py install

pip3 uninstall django

二、常用命令

1.django_admin startproject mysite1    创建项目

2.python3 manage.py startapp app1 创建子级应用模块

3.python3 manage.py makemigrations

4.python3 manage.py migrate

5.python3 manage.py runserver 启动项目

三、项目的基本配置

3.1.settings.py

BASE_DIR 项目的绝对路径,后续如果需要配置路径可以使用 os.path.join(BASE_DIR,'相对路径')

DEBUG = True  上线后改为False

ALLOWED_HOSTS 上线后配置实际的域名或者IP地址

[] 空列表,表示只有请求头中host为127.0.0.1, localhost能访问本项目

['*'],表示任何请求头的host都能访问到当前项目

['192.168.1.3', '127.0.0.1'] 表示只有当前两个host头的值能访问当前项目

INSTALLED_APPS 当前项目中已经安装的应用列表,如果增加新的应用需要在这个地方注册

MIDDLEWARE 中间件

DATABASES  数据库相关配置

DATABASES={

'default': {

'ENGINE':'django.db.backends.mysql',

'NAME':'myblog',

'USER':'root',

'PASSWORD':'123456',

'PORT':'3306',

   }

}

LANGUAGE_CODE = 'zh-Hans' 中文  / "en-us"

TIME_ZONE = 'Asia/Shanghai' 时区

STATICFILE_DIR=(os.path.join(BASE_DIR,static'),)

跨域请求配置

安装:pip3installdjango-cors-headers

MIDDLEWARE= [

    ...

'corsheaders.middleware.CorsMiddleware',#注意顺序

'django.middleware.common.CommonMiddleware',

    ...

]

INSTALLED_APPS= [

    ...

'corsheaders',

]

CORS_ALLOW_METHODS= (

'DELETE',

'GET',

'OPTIONS',

'PATCH',

'POST',

'PUT',

'VIEW',

)

CORS_ALLOW_HEADERS= (

'XMLHttpRequest',

'X_FILENAME',

'accept-encoding',

'authorization',

'content-type',

'dnt',

'origin',

'user-agent',

'x-csrftoken',

'x-requested-with',

'Pragma',

)

CORS_ALLOW_CREDENTIALS=True

CORS_ORIGIN_ALLOW_ALL=True

静态文件

STATIC_URL = '/static/'STATICFILES_DIR=(os.path.join(BASE_DIR, 'login/static'),os.path.join(BASE_DIR, 'zhihu/static'))STATIC_ROOT =  '/root/myblog_static/static'

3.2.视图函数(view)

视图函数语法格式

defxxx_view(request[,其它参数...]):

returnHttpResponse对象

3.3.路由配置

fromdjango.conf.urlsimporturl,include

urlpatterns= [

url(r'^admin/',admin.site.urls),

url(r'^login',include('login.urls')),#以login开头的url都转向login.urls处理

...# 此处配置主路由

]

#分组路由

url(r'^page(\d+)',views.view_page)

defview_page(request,n):

returnHttpResponse('这是让我的第%s个页面'%(n))

#命名分组路由

url(r'^person/(?P<name>\w+)/(?P<age>\d{1,3})',views.view_person),

defview_person(request,name,age):

returnHttpResponse('我叫{},今年{}岁'.format(name,age))

常见问题

1.用户登录状态保持

使用jwt(jsonwebtoken)生成一个token,包含base64后的header,payload以及sign三部分组成的字节串,使用hmac-SHA256进行加密,生成一个token。payload中一般包含username以及exp过期时间。

importjwt

fromdjango.confimportsettings

importtime

now=time.time()

payload={"username":username,"exp":exp+now}

return       

jwt.encode(payload,settings.JWT_TOKEN_KEY,algorithm="HS256")

2.使用celery异步进行邮件发送

fromceleryimportCelery

fromdjango.confimportsettings

importos

# 添加django环境变量

os.environ.setdefault('DJANGO_SETTINGS_MODULE','dadashop12.settings')

app=Celery('dadashop12')

app.conf.update(

BROKER_URL='redis://:@127.0.0.1/1'

)

app.autodiscover_tasks(settings.INSTALLED_APPS)

# 发邮件

@app.task

defsend_active_email_async(email_address,v_url):

subject="激活邮件"

html_message='''

   <p>尊敬的用户您好</p>

   <p>请点击此处链接激活您的账户(3天内有效):</p>

   <p><a href='%s' target='_blank'>点击激活</a></p>

   '''%v_url

send_mail(subject,'',from_email=settings.EMAIL_HOST_USER,recipient_list=[email_address],html_message=html_message)

#调用异步发送邮件

send_active_email_async.delay(email,verify_url)

3.django中的事务处理

fromdjango.dbimporttransaction

try:

    withtransaction.atomic():

user=    UserProfile.objects.create(username=username,password=mpassword,phone=phone,email=email)

weibo_user=WeiboProfile.objects.get(wuid=uid)

weibo_user.user_profile=user

weibo_user.save()

exceptExceptionase:

print('--created error is %s'%e)

returnJsonResponse({'code':10112,'error':'create user error'})

常用配置汇总

1、settings.py常用配置

#mysql数据库配置

DATABASES= {

'default': {

'ENGINE':'django.db.backends.mysql',

'NAME':"dadashop12",

'USER':'root',

'PASSWORD':'123456',

'HOST':'127.0.0.1',

'PORT':'3306'

   }

}

#语言及时区

LANGUAGE_CODE='zh-Hans'

TIME_ZONE='Asia/Shanghai'

#主路由不校验末尾/

APPEND_SLASH=False

2、缓存相关

#使用django-redis缓存时

CACHES= {

"default": {

"BACKEND":"django_redis.cache.RedisCache",

"LOCATION":"redis://127.0.0.1:6379",

"OPTIONS": {

"CLIENT_CLASS":"django_redis.client.DefaultClient",

# "PASSWORD":123456

           }

       }

}

3、跨域请求

corsheaders

        1,INSTALLED_APPS 中添加 corsheaders

        2,MIDDLEWARE 中添加 corsheaders.middleware.CorsMiddleware

        位置尽量靠前,官方建议 ‘django.middleware.common.CommonMiddleware’ 上方

        3,CORS_ORIGIN_ALLOW_ALL  布尔值  如果为True 白名单不启用

        4,CORS_ORIGIN_WHITELIST =[

            "https://example.com"

        ]

        5, CORS_ALLOW_METHODS = (

                'DELETE',

                'GET',

                'OPTIONS',

                'PATCH',

                'POST',

                'PUT',

                )

        6, CORS_ALLOW_HEADERS = (

                'accept-encoding',

                'authorization',

                'content-type',

                'dnt',

                'origin',

                'user-agent',

                'x-csrftoken',

                'x-requested-with',

            )

        7, CORS_PREFLIGHT_MAX_AGE  默认 86400s options过期时间

        8, CORS_EXPOSE_HEADERS  []  服务端返回自定义响应头时配置

        9, CORS_ALLOW_CREDENTIALS  布尔值, 默认False  接收请求时的cookie

4.邮件发送

利用QQ邮箱发送电子邮件

django.core.mail 子包封装了 电子邮件的自动发送SMT协议

前其准备:

申请QQ号

用QQ号登陆QQ邮箱并修改设置

用申请到的QQ号和密码登陆到 https://mail.qq.com/

修改 QQ邮箱->设置->帐户->“POP3/IMAP......服务”

设置Django服务器端的,用简单邮件传输协议SMTP(Simple Mail Transfer Protocol) 发送电子邮件

settings.py 设置

# 发送邮件设置

EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'# 固定写法

EMAIL_HOST='smtp.qq.com'# 腾讯QQ邮箱 SMTP 服务器地址

EMAIL_PORT=25# SMTP服务的端口号

EMAIL_HOST_USER='xxxx@qq.com'# 发送邮件的QQ邮箱

EMAIL_HOST_PASSWORD='rtqdpnhfmaenbccb'# 在QQ邮箱->设置->帐户->“POP3/IMAP......服务” 里得到的在第三方登录QQ邮箱授权码

EMAIL_USE_TLS=True# 与SMTP服务器通信时,是否启动TLS链接(安全链接)默认false

视图函数中

html_message="""此处写html片段"""

fromdjango.coreimportmail

mail.send_mail(

subject,#题目

message,# 消息内容

from_email,# 发送者[当前配置邮箱]

recipient_list=['xxx@qq.com'],# 接收者邮件列表

           )

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