一、安装
1、官网及参考文档
官网
中文文档
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'],# 接收者邮件列表
)