创建项目
以下是命令行创建python项目的指南,如果是使用pycharm创建的django工程则从创建工程开始,命令行即Terminal的虚拟环境,命令不需要做任何改变
创建第一个项目
安装django
pip install django==2.2.3
命令行进入指定的文件目录,创建工程(xxxx为项目名称)
django-admin startproject xxxx
命令行进入工程目录(xxxx为项目名称)
cd xxxx
创建app(yyyy为项目名称)
python manage.py startapp yyyy
此时整个目录结构如下
tree
xxxx/
yyyy/
migrations/
_init_.py
_init_.py
admin.py
apps.py
models.py
tests.py
views.py
xxxx/
_init_.py
settings.py
urls.py
wsgi.py
manage.py
配置 urls.py (路由)
修改工程目录xxxx/xxxx下的 urls.py
from django.urls import path,include
urlpatterns = [
path('', include("yyyy.urls")),
]
这里是将路由映射迁移到app的 urls.py 文件,django默认是不会创建这个文件,所以我们需要在yyyy目录下创建文件 urls.py
修改工程目录xxxx/yyyy下的 urls.py
from django.contrib import admin
from django.urls import path
from . import views
app_name = 'yyyy'
urlpatterns = [
path('', views.index, name="index"),
path('admin/', admin.site.urls),
]
这里将根目录的路由映射到试图views里面的index方法,我们需要去 views.py 进行添加
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello world! This is yyyy index.")
在 setting.py 的INSTALLED_APPS中添加app “yyyy”
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'yyyy',
]
到这里我们的项目创建就完成啦,在命令行中运行服务器,打开连接就可以看到我们index返回的HttpResponse的内容如下
python manage.py runserver
结果:
连接MySQL
在命令行中进入mysql创建数据库‘mydb’
create database mydb;
修改 setting.py 默认数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'mydb', # 你要存储数据的库名,事先要创建之
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 自己的MySQL数据库密码
'HOST': 'localhost', # 主机
'PORT': '3306', # 数据库使用的端口
}
}
Python3不支持MySQLdb,可用pymysql代替。
1.首先,在Python虚拟环境下安装pymysql
pip install pymysql
2.然后,在项目文件夹下的_init_.py添加如下代码即可。
import pymysql
pymysql.install_as_MySQLdb()
3.再者,在Terminal中执行数据库迁移命令:
搭建Django2+Python3+MySQL5时同步数据库时报错:mysqlclient 1.3.3 or newer is required; you have 0.7.11.None:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None
解决办法:
找到Python安装路劲下的Python36-32\Lib\site-packages\django\db\backends\mysql\base.py文件
将文件中的如下代码注释
if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
重新在项目manage.py路劲下执行如下命令即可
Django调用pymysql时报错:AttributeError: ‘str’ object has no attribute ‘decode’:
File “F:\Project\PythonEnve***\lib\site-packages\django\db\backends\mysql\operations.py”, line 146, in last_executed_query
query = query.decode(errors=‘replace’)
AttributeError: ‘str’ object has no attribute ‘decode’
解决方法:
vi 上述文件,vim operations.py 注释掉 if 和 下面结果,直接返回query数据,结果就可以正常生成了。
def last_executed_query(self, cursor, sql, params):
# With MySQLdb, cursor objects have an (undocumented) "_executed"
# attribute where the exact query sent to the database is saved.
# See MySQLdb/cursors.py in the source distribution.
query = getattr(cursor, '_executed', None)
#注释掉这下面两句,直接返回query
# if query is not None:
#query = query.decode(errors='replace')
return query
把decode改成encode是错误的,简直乱用!
再重新迁移数据库运行应该就不会有问题了,models.py文件会生成django默认的数据库模型,也会同步到mydb数据库中。