1、创建项目
1.1 安装Django :pip install Django
1.2 新建目录learning_log
1.2 进入目录learning_log, django-admin.py startproject learning_log . 【注】:后面那个“.”不能落下
2、python3无法安装MysqlDB,使用pymysql代替
2.1 pip install pymysql 【注】:不要使用pymysql3,版本太低,运行migrate时候会报错“ImportError: cannot import name 'Thing2Literal'”
2.2 在项目根下的__init__文件中配置如下:
import pymysql
pymysql.install_as_MySQLdb()
2.3 运行 python manage.py makemigrations
python manage.py migrate
3、model中,在页面输出对象时候,想输出某个值显示,比如:页面显示obj时候显示obj.name,在model中的某个表对应的类中写入代码如下:
2.x : def __unicode__(self):
return self.name
3.x : def __str__(self):
return self.name
4、django的shell,输入命令、数据后就可以通过交互终端会话以编程方式查看这些数据,为了测试项目和排除故障
4.1 python manage.py shell
from learning_logs.models import Topic
Topic.objects.all()
5、解决pycharm中Django内部方法找不到、html无法识别django语法:
打开pycharm的File->Settings,搜索Django,然后将项目根目录加入就好了
在setting-language&frameworks-python template language中选择django
6、修改templates文件夹位置:
6.1 在settings.py中,设置TEMPLATES下的DIRS:
'DIRS': [os.path.join(BASE_DIR,'templates')], //设置在根目录
7、登陆遇到错误:'WSGIRequest' object has no attribute 'session'
我的MIDDLEWARE的配置是:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
实际上,这是Django版本的问题,1.10之前,中间件的key为MIDDLEWARE_CLASSES, 1.10之后,为MIDDLEWARE。所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑。
改配置为:
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
就可以解决了。
8、关于STATIC_URL、STATICFILES_DIRS
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
STATIC_URL :#用来在页面显示静态资源用的 src={{ STATIC_URL }}{{ course.image }}
STATICFILES_DIRS :资源在服务器上的绝对路径