将创建django的步骤记录下来
准备工作
- python的安装、虚拟环境配置及包管理
- 配置数据库
- MySQL
- SQLServer的配置见我另一篇随笔https://blog.csdn.net/weixin_38848757/article/details/114867367
以上完成后
1、创建虚拟环境:mkvirtualenv 虚拟环境名称
2、虚拟环境下安装django:
pip install django==版本号
3、创建项目:
django-admin startproject 项目名称
建议参照我另一篇随笔 https://blog.csdn.net/weixin_38848757/article/details/114833020 优化项目结构
如果优化后的项目在使用 pycharm 控制台时遇到如下报错
可以这样更改 django 源码
# lib\site-packages\django\conf\__init__.py
class LazySettings(LazyObject):
def _setup(self, name=None):
# 原来:
# settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
# 更改为:
settings_module = os.environ.get(ENVIRONMENT_VARIABLE) or 'settings.dev'
# 其他代码保持原样不要改动,这个问题只会出现在开发环境中,生产环境下不会遇到,也不用更改 django 源代码
4、注意:如果是通过命令行创建项目,还需要在 Pycharm => File => Settings => Project => Python Interpreter 中关联虚拟环境
5、虚拟环境下安装安装 mysql 驱动(如有需要):
pip install pymysql
pip install mysqlclient
6、修改 settings.py :https://www.cnblogs.com/brucezhang2017/articles/8408736.html
- DATABASES = { ... }
- 静态文件路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "statics"),
]
- 其他
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
7、配置用户表 注意在此步骤之前不要进行数据库mig操作
- from django.contrib.auth.models import AbstractUser,创建用户信息表
- settings中加入app名称以及AUTH_USER_MODEL=’app名称.用户信息表名’
- makemigrations ,migrate
8、配置xadmin:
- 先在虚拟环境下安装依赖:
pip install django-crispy-forms django-reversion django-formtools future httplib2 six pip install xlwt xlsxwriter
- 然后从git上下载xadmin源码:https://gitee.com/TomatoChewgum/xadmin_django3.x并拷贝至项目中,建议单独建个与apps平级的目录存放,或直接 pip 安装
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 # django2.x可用 pip install git+git://github.com/sshwsfc/xadmin.git # django3.x可用
- 在settings.py中配置xadmin:
INSTALLED_APPS = [ …… 'crispy_forms', 'xadmin', ]
然后mig数据库,几个报错的处理方式
#错误一:No module named 'django.core.urlresolvers
#原因:django2.0 把原来的 django.core.urlresolvers 包更改为了 django.urls包。解决:把导入的包都修改一下就可以了。
#错误二:cannot import name 'six' from 'django.utils'
#原因:django的版本太新了。解决:用django2;或把
from django.utils import six
#改成
import six
#错误三:cannot import name 'python_2_unicode_compatible' from 'django.utils.encoding'
from django.utils.encoding python_2_unicode_compatible
#改成
from six import python_2_unicode_compatible
#错误四:No module named 'django.contrib.staticfiles.templatetags'
from django.contrib.staticfiles.templatetags.staticfiles import static
#改成
from django.templatetags.static import static
#错误五:cannot import name 'FieldDoesNotExist' from 'django.db.models.fields'
from django.core.exceptions import FieldDoesNotExist
#错误六:No module named 'import_export'
pip install django-import-export
#错误七:cannot import name 'SKIP_ADMIN_LOG' from 'import_export.admin'
#修改报错文件的代码,引入需要的类,用类调用方法,以此获取变量
#报错的引入方式:from import_export.admin import SKIP_ADMIN_LOG, TMP_STORAGE_CLASS
#正确引入方式
from import_export.admin import ImportExportMixinBase
#然后重新赋值那两个报错的变量:
SKIP_ADMIN_LOG = ImportMixin().get_skip_admin_log()
TMP_STORAGE_CLASS = ImportMixin().tmp_storage_class
创建超级用户
python manage.py createsuperuser
urls.py中将django自带的管理系统替换掉
import xadmin
urlpatterns = [
# path('admin/', admin.site.urls),
url(r'xadmin/', xadmin.site.urls),
]
settings.py:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False #True为UTC时间
为app设置别名:
# 每个app下,apps.py
class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户'
在每个app路径下创建adminx.py文件
依赖包管理
- 生成requirements.txt
pip freeze --all > requirements.txt
- 需要生成本项目而不是整个虚拟环境需要的模块列表,那么需要
pip install pipreqs
pipreqs ./
- 执行requirements文件
pip install -r requirements.txt
配置rest_framework
官网:https://www.django-rest-framework.org/
- 安装drf及大概率用到的包
pip install django-guardian
pip install coreapi
pip install djangorestframework
pip install markdown
pip install django-filter
- 在settings.py中配置添加'rest_framework'
INSTALLED_APPS = [
...
'rest_framework',
'django_filters',
]
- urls.py中加入drf登录的配置:
from django.conf.urls import url, include
urlpatterns = [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]