环境

  1. mkvirtualenv -p python3.6 mytest # 创建虚拟环境
  2. workon mytest # 进入虚拟环境
  3. # 按照基础环境依赖
  4. pip install django==1.11.11
  5. pip install djangorestframework
  6. pip install pymysql

创建项目

  1. """
  2. 前提:在目标目录新建 mytest 文件夹
  3. >: cd 建立的 mytest 文件夹
  4. >: django-admin startproject mytest
  5. 开发:用pycharm打开项目,并选择提前备好的虚拟环境
  6. """

重构项目目录

  1. """
  2. ├── mytest
  3. ├── logs/ # 项目运行时/开发时日志目录 - 文件夹
  4. ├── manage.py # 脚本文件
  5. ├── mytest/ # 项目主应用,开发时的代码保存 - 包
  6. │ ├── apps/ # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包
  7. │ ├── libs/ # 第三方类库的保存目录[第三方组件、模块] - 包
  8. │ ├── settings/ # 配置目录 - 包
  9. │ ├── dev.py # 项目开发时的本地配置
  10. │ ├── prod.py # 项目上线时的运行配置
  11. │ ├── urls.py # 总路由
  12. │ ├── utils/ # 多个模块[子应用]的公共函数类库[自己开发的组件]
  13. └── scripts/ # 保存项目运营时的脚本文件 - 文件夹
  14. """

配置开发环境

  1. """
  2. 1.修改 wsgi.py 与 manage.py 两个文件:
  3. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mytest.settings.dev')
  4. 2.将settings.py删除或改名,内容拷贝到settings/dev.py中
  5. 3.修改dev.py文件内容
  6. LANGUAGE_CODE = 'zh-hans'
  7. TIME_ZONE = 'Asia/Shanghai'
  8. 4.修改启动配置:见插图
  9. https://i.loli.net/2019/09/30/nyT21dIvRjpzVGM.png
  10. 5.在任何一个__init__.pu文件中测试默认配置文件是否是dev.py文件
  11. from django.conf import settings
  12. print(settings)
  13. """

配置日志

  1. # 官网:https://docs.djangoproject.com
  2. # 中文loggin配置:https://docs.djangoproject.com/zh-hans/2.2/topics/logging/
  3. # 在项目的 dev.py 中配置 Django 项目的log日志,那Django自己出现的打印记录不仅可以输出到控制台,还可以记录到日志文件,当项目上线记录日志时及其重要的
  4. LOGGING = {
  5. 'version': 1,
  6. 'disable_existing_loggers': False,
  7. 'formatters': {
  8. 'verbose': {
  9. 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
  10. },
  11. 'simple': {
  12. 'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
  13. },
  14. },
  15. 'filters': {
  16. 'require_debug_true': {
  17. '()': 'django.utils.log.RequireDebugTrue',
  18. },
  19. },
  20. 'handlers': {
  21. 'console': {
  22. 'level': 'DEBUG',
  23. 'filters': ['require_debug_true'],
  24. 'class': 'logging.StreamHandler',
  25. 'formatter': 'simple'
  26. },
  27. 'file': {
  28. # 实际开发建议使用WARNING
  29. 'level': 'INFO',
  30. 'class': 'logging.handlers.RotatingFileHandler',
  31. # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR
  32. 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/luffy.log"),
  33. # 日志文件的最大值,这里我们设置300M
  34. 'maxBytes': 300 * 1024 * 1024,
  35. # 日志文件的数量,设置最大日志数量为10
  36. 'backupCount': 10,
  37. # 日志格式:详细格式
  38. 'formatter': 'verbose',
  39. 'encoding': 'utf-8'
  40. },
  41. },
  42. # 日志对象
  43. 'loggers': {
  44. 'django': {
  45. 'handlers': ['console', 'file'],
  46. 'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统
  47. },
  48. }
  49. }

数据库配置

  1. """
  2. 1.管理员连接数据库
  3. 2.创建数据库
  4. >: create database mytest default charset=utf8;
  5. 3.以管理员身份登录数据库
  6. >: mysql -uroot -p123
  7. 4.查看用户
  8. >: select user,host,password from mysql.user;
  9. 5.设置权限账号密码
  10. # 授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'
  11. >: grant all privileges on mytest.* to 'mytest'@'%' identified by 'mytest';
  12. # 要是本机连mysql连不上,再添加localhost访问权限,本机就可以登录了
  13. >: grant all privileges on mytest.* to 'mytest'@'localhost' identified by 'mytest';
  14. # 设置完有权限限制的账号后一定要刷新权限,如果没刷新权限,该终端无法被通知
  15. >: flush privileges;
  16. 6.退出管理员,用账号 mytest 密码 mytest 登入开发
  17. >: exit
  18. >: mysql -umytest -pmytest
  19. # 后台项目进行数据库配置
  20. 7.mytest/settings.py配置
  21. DATABASES = {
  22. "default": {
  23. "ENGINE": "django.db.backends.mysql",
  24. "HOST": "127.0.0.1",
  25. "PORT": 3306,
  26. "USER": "mytest",
  27. "PASSWORD": "mytest",
  28. "NAME": "mytest",
  29. }
  30. }
  31. 6.mytest/__init__.py
  32. import pymysql
  33. pymysql.install_as_MySQLdb()
  34. 7.运行会出现Django与pymysql版本兼容问题:见两张插图
  35. """

home应用的创建

注册drf、弃用jdango的csrf

  1. # dev.py
  2. INSTALLED_APPS = [
  3. # ...
  4. 'rest_framework',
  5. ]
  6. MIDDLEWARE = [
  7. 'django.middleware.security.SecurityMiddleware',
  8. 'django.contrib.sessions.middleware.SessionMiddleware',
  9. 'django.middleware.common.CommonMiddleware',
  10. # 'django.middleware.csrf.CsrfViewMiddleware',
  11. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  12. 'django.contrib.messages.middleware.MessageMiddleware',
  13. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  14. 'corsheaders.middleware.CorsMiddleware',
  15. ]

创建 home 应用

  1. """
  2. 1.前往apps目录下创建app:cd mytest/apps
  3. 2.创建app:python ../../manage.py startapp home
  4. """

配置 apps 到环境变量并注册home应用

  1. # dev.py
  2. import os
  3. import sys
  4. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  5. sys.path.append(os.path.join(BASE_DIR, 'apps'))
  6. # 注:不添加环境变量,注册 应用 很麻烦,会出现 应用 找不到
  7. INSTALLED_APPS = [
  8. # ...
  9. 'home'
  10. ]

注册子路由

  1. # 主路由:urls.py
  2. from django.conf.urls import url, include
  3. urlpatterns = [
  4. # ...
  5. url('', include('home.urls')),
  6. ]
  7. # 子路由:home/urls.py
  8. from django.conf.urls import url
  9. urlpatterns = [
  10. ]

分离的前后台交互

后台处理跨域

  1. '''
  2. https://github.com/ottoyiu/django-cors-headers/
  3. 安装django-cors-headers模块
  4. 在settings.py中配置
  5. # 注册app
  6. INSTALLED_APPS = [
  7. ...
  8. 'corsheaders'
  9. ]
  10. # 添加中间件
  11. MIDDLEWARE = [
  12. ...
  13. 'corsheaders.middleware.CorsMiddleware'
  14. ]
  15. # 允许跨域源
  16. CORS_ORIGIN_ALLOW_ALL = False
  17. # 配置指定跨域域名
  18. CORS_ORIGIN_WHITELIST = [
  19. 'http://example.com'
  20. ]
  21. # 允许ajax请求携带cookie
  22. CORS_ALLOW_CREDENTIALS = True
  23. # 注:前台请求头携带参数,中间件拒绝Access-Control-Allow-Headers错误,中间件要设置 default_headers
  24. from corsheaders import defaults
  25. default_headers 中添加 '前端ajax请求头里面的字段名'
  26. '''

静态目录

  1. # dev.py 配置
  2. # 1.访问静态文件的url地址前缀
  3. STATIC_URL = '/static/'
  4. # 2. 设置django的静态文件目录
  5. STATICFILES_DIRS = [
  6. os.path.join(BASE_DIR, "static")
  7. ]
  8. # 静态目录创建
  9. # 3.在luffyapi/luffyapi中创建static目录(谁是项目根目录就在那个文件夹下创建)

媒体目录

  1. # dev.py配置
  2. # 1.访问上传文件的url地址前缀
  3. MEDIA_URL = "/media/"
  4. # 2.项目中存储上传文件的根目录
  5. MEDIA_ROOT = os.path.join(BASE_DIR, "media")
  6. # 媒体目录创建
  7. # 3.在luffyapi/luffyapi中创建media目录(谁是项目根目录就在那个文件夹下创建)
  8. # 配置路由
  9. from django.urls import re_path
  10. from django.views.static import serve
  11. from django.conf import settings
  12. urlpatterns = [
  13. re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
  14. ]

drf-jwt开发

配置信息:JWT_AUTH到dev.py中
  1. import datetime
  2. JWT_AUTH = {
  3. # 过期时间
  4. 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # hours 小时、minutes 分钟
  5. # 自定义认证结果:见下方序列化user和自定义response
  6. 'JWT_RESPONSE_PAYLOAD_HANDLER': 'home.utils.jwt_response_payload_handler',
  7. }
自定义response:home/utils.py
  1. def jwt_response_payload_handler(token, user=None, request=None):
  2. # restful 规范
  3. return {
  4. 'code': 0,
  5. 'msg': 'OK',
  6. 'data': {
  7. 'token': token,
  8. 'username': user.username
  9. }
  10. }
基于drf-jwt的全局认证:home/authentications.py(自己创建)
  1. import jwt
  2. from rest_framework.exceptions import AuthenticationFailed
  3. from rest_framework_jwt.authentication import jwt_decode_handler
  4. from rest_framework_jwt.authentication import get_authorization_header
  5. from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication
  6. class JSONWebTokenAuthentication(BaseJSONWebTokenAuthentication):
  7. def authenticate(self, request):
  8. # 采用drf获取token的手段 - HTTP_AUTHORIZATION - Authorization
  9. token = get_authorization_header(request)
  10. if not token:
  11. raise AuthenticationFailed('Authorization 字段是必须的')
  12. # 可以添加反扒措施:原功能是token有前缀
  13. # drf-jwt认证校验算法
  14. try:
  15. payload = jwt_decode_handler(token)
  16. except jwt.ExpiredSignature:
  17. raise AuthenticationFailed('签名过期')
  18. except jwt.InvalidTokenError:
  19. raise AuthenticationFailed('非法用户')
  20. user = self.authenticate_credentials(payload)
  21. # 将认证结果丢该drf
  22. return user, token
全局启用:settings/dev.py
  1. REST_FRAMEWORK = {
  2. # 认证模块
  3. 'DEFAULT_AUTHENTICATION_CLASSES': (
  4. 'home.authentications.JSONWebTokenAuthentication',
  5. ),
  6. }
局部启用禁用:任何一个cbv类首行
  1. # 局部禁用
  2. authentication_classes = []
  3. # 局部启用
  4. from home.authentications import JSONWebTokenAuthentication
  5. authentication_classes = [JSONWebTokenAuthentication]

数据库迁移、超级管理员

  1. '''
  2. 数据库迁移:python manage.py makemigrations
  3. python manage.py migrate
  4. 创建超级管理员:python manage.py createsuperuser
  5. '''

Django 项目环境搭建的更多相关文章

  1. 二.django项目环境搭建

    Ⅰ.web框架介绍 1.socket 服务端 1)客户端(手机中各种app.浏览器)是用来与服务端(网站的服务器程序)进行交互的 2)服务端类似发电厂,客户端类似电器,socket类似插座,互联网的数 ...

  2. django项目环境搭建

    本文转载自: https://blog.csdn.net/xiaogeldx/article/details/89038299 在码云平台创建项目 版本控制的种类 主要使用github(最主流) 国内 ...

  3. django项目环境搭建备忘

    由于使用python3,所以尽量为每个项目配置虚拟环境来管理各个项目的=. 新建一个项目文件夹,进入该路径 python3 -m venv ll_env 然后激活虚拟环境 source ll_env/ ...

  4. Django项目: 项目环境搭建 ---- 一、创建django项目

    项目环境搭建 一.创建django项目 1.创建python虚拟环境 在虚拟机上创建python虚拟环境,因为实际项目部署,实在linux mkvirtualenv -p /usr/bin/pytho ...

  5. 3/16 Django框架 环境搭建

    3/16 Django框架 环境搭建 环境搭建 Python解释器 Python代码通过Python解释器去执行. 编程语言 机器语言---汇编语言(助记符)---高级语言 解释型语言:解释器将代码一 ...

  6. django开发环境搭建(参考流程)

    django开发环境搭建(参考流程) 2013-08-08 01:09:06 分类: LINUX 原文地址:django开发环境搭建(参考流程) 作者:bailiangcn 对于一个初学者,在实际的开 ...

  7. vue项目环境搭建与组件介绍

    Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...

  8. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  9. mac OS X下Java项目环境搭建+IntelliJ IDEA Jrebel插件安装与破解+Office 2016破解版安装

    一.mac OS X下Java项目环境搭建 因为某些原因新入手了台最新版的MacBook Pro,意味着今天要花一天时间安装各种软件以及项目环境搭建╮(╯▽╰)╭ 项目环境搭建步骤: 1.安装jdk ...

随机推荐

  1. php实现进度条原理

    PHP实现进度条的原理: 模版替换,在页面设置一个标识,轮子自己的页面,不发请求给服务器,由服务器端获得进度,然后替换该页面标识,达到进度条效果. 页面代码: 1 2 3 4 5 6 7 8 9 10 ...

  2. asp.net+扫描仪+图片上传

    问题: IE浏览器下使用Activex插件调用客户端扫描仪扫描文件并山传,可以将纸质档案(如合同.文件.资料等)扫描并将扫描图像保存到服务器,可以用于合同管理.档案管理等. 通过插件方式调用扫描仪扫描 ...

  3. yum源更换

    折腾了半天,怀疑自己能力 的时候,发现原来不是我的错.树莓派换源国内的aliyun,163都不能用,最好找到这个 # CentOS-Base.repo # # The mirror system us ...

  4. 我眼中的CentOS 下 安全策略

    安全策略 ===================== 1.每个人用自己名字的账户和密码登陆服务器(便于追踪用户操作,记录用户行为)2.只允许指定组(或用户)使用sudo命令(最好还要禁止root用户远 ...

  5. python requests使用登陆之后的cookie

    def getcontent(self): cookie_text=r'ur=FTW; mid=WsrlLwAEAAEfpCstNyTJl-1oZa0w; ig_pr=1; ig_vh=949; cs ...

  6. UNITY编辑器模式下static变量的坑

    在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包函数执行完后系统不会帮我们清空 #if UN ...

  7. springboot编程之全局异常捕获

    springboot编程之全局异常捕获 1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice, 在方法上注解@ExceptionHandler( ...

  8. R 保存包含中文的 eps 图片--showtext

    来自统计之都,感谢 Ihavenothing(http://cos.name/cn/profile/81532) 详情参考:http://cos.name/cn/topic/151358?replie ...

  9. CSS学习笔记2:选择器

    标签选择器 1.选择要给样式的目标标签,所以叫做标签选择器,也叫元素选择器. 2.给所有相同标签,给相同样式. <!DOCTYPE html> <html lang="en ...

  10. EasyUI的datagrid有值但是显示不出来

    $("#goodsList").datagrid({  url: "../Ajax/GoodsAjax.ashx",  queryParams:  {  cmd ...