写在最前

自己从一个python小白,自学django,实现了前后端搭建,打通了mysql数据库,建立了基于restful API的数据接口,最终成功部署在腾讯云和阿里云平台,实现技术落地。首先感谢csdn上各位前辈的经验指导,让我在迷茫中找到方向,也将自己的填坑记录做成攻略,po在这里,供大家参考。

创建django项目

PyCharm开源社区版不像商业版那样可以直接通过Django来创建项目,必须通过以下几个步骤进行:

创建项目:cmd命令先进入目录:cd E:\pj-python\pj01,再在cmd命令行下输入:django-admin startproject pj001 (cmd命令先进入目录:cd E:\pj-python\pj01) 导入项目:打开Pycharm,open,选择刚才创建的项目 创建应用:先在cmd命令行下进入demo所在目录:cd E:\pj-python\pj01\pj001,然后在cmd命令行下输入:python manage.py startapp app001 (cmd命令下先进入pj001所在的目录) 或者在pycharm的terminal界面也跟cmd一样。查看目录: (3)各文件介绍 “项目名/项目名/”下有: init.py -->记得加入处理mysql连接的语句 index.py(我自己建的) settings.py :在installed_apps部分要加入自己创建的应用名,database部分设置好与mysql的连接,static部分加上staticfiles_dirs urls.py :在urlpatterns部分设置好要访问的url和views中函数的对应关系 wsgi.py:一般不要动 新建一个应用,下面会有: migrations文件夹:暂时不要动;‘ init.py:暂时不要动 admin.py: apps.py: forms.py: 我自己加的 models.py: 如果需要创建数据表就要在这里面写,然后用python manage.py makemigrations和python manage.py migrate在mysql数据库中生成真实的表。 tests.py: views.py: 可获取models中定义的表的数据,import models,…

2、安装mysql server 网上攻略很多,不载累述

3、创建数据库和用户 进入mysql数据库目录:C:\Program Files (x86)\MySQL\MySQL Server 5.7\bin> 输入mysql -h localhost -u root -p进入数据库 密码:123456 mysql>create database 数据库名; mysql>create user 用户名@localhost identified by ‘123456’; mysql>grant all privileges on 数据库.* to 用户名@localhost; Ctrl+z退出

4、设置数据库连接 如遇到如下问题 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient? 解决方案: (1) 安装pymsql pip install pymysql (2) 安装完毕,打开项目的_init_.py,添加代码: import pymysql pymysql.install_as_MySQLdb()

5、创建数据表(数据迁移) (1)选择某个应用 (2)在其models.py中定义表结构, (3)在其admin.py中注册表 (4)数据迁移:python manage.py makemigrations 应用名 python manage.py migrate 如出现RuntimeError: cryptography is required for sha256_password or … 执行如下操作: 1). ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER; #修改加密规则 2).ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’; #更新一下用户的密码 3).FLUSH PRIVILEGES; #刷新权限 4).再重置下密码:alter user ‘root’@‘localhost’ identified by ‘123456’;

6、安装captcha pip install django-simple-captcha settings.py配置,加入captcha INSTALLED_APPS = [ ‘captcha’, ] urls.py配置 加入url from django.urls import path,include path(‘captcha’, include(‘captcha.urls’)), ———————————————— 错误一:No module named ‘MySQLdb’ 原因:python3连接MySQL不能再使用mysqldb,取而代之的是pymysql。 解决方法:在python的MySQL包中,即路径:C:\Users\adong\AppData\Local\Programs\Python\Python36\Lib\site-packages\Django-2.0.3-py3.6.egg\django\db\backends\mysql 下的__init__.py文件中加入: import pymysql pymysql.install_as_MySQLdb()

错误二:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None 原因:在解决了错误一以后出现了此错误。 解决方法:在python的MySQL包中,即路径:C:\Users\adong\AppData\Local\Programs\Python\Python36\Lib\site-packages\Django-2.0.3-py3.6.egg\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)

settings.py文件中修改数据库配置为下面的内容:

#Database #https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, ‘HOST’: ‘127.0.0.1’, ‘PORT’: ‘3306’, ‘NAME’: ‘mysql’, ‘USER’: ‘root’, ‘PASSWORD’: ‘zwg123456’, ‘OPTIONS’: { ‘init_command’: “SET sql_mode=‘STRICT_TRANS_TABLES’”, }, } } 驱动(ENGINE)、主机地址(HOST)、端口号(PORT)、数据库(NAME)、用户名(NAME)以及登录密码(PASSWORD); 二、在__init_.py文件添加如下配置:

#coding=utf-8

import pymysql pymysql.install_as_MySQLdb() 因为Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持Python3,因此这里将MySQL驱动设置为pymysql。

三、执行数据迁移

在项目manage.py路劲下执行如下命令即可

python manage.py makemigrations python manage.py migrate ———————————————— 在利用models.py文件生成数据库表之前,我们需要手动的先创建数据库: mysql> create database django_mysql; 创建完django_msql库之后,我们在终端执行如下命令,他的作用是将models文件生成一个迁移文件 python3 manage.py makemigrations 迁移文件生成完毕,执行

python manage.py migrate django.db.utils.InternalError: (1060, “Duplicate column name ‘user_id’”) 一直出现这个问题,删除了migration文件里面的除了__int__.py以外的所有文件,继续执行,python manage.py migration,解决。 如果还不行,就用以下指令: python manage.py migrate --fake 这个解决问题 ———————————————— 如果修改了models中的数据字段,,再次迁移: python3 manage.py makemigrations --empty managerbook # managerbook就是你的app名字,此处要写成自己的app名字 python3 manage.py makemigrations # 再次正常运行生成迁移文件的命令 python3 manage.py migrate # 同步数据库 You are trying to add a non-nullable field ‘name’ to contact without a default; we can’t do that (the database needs something to populate existing rows). Please select a fix:

Provide a one-off default now (will be set on all existing rows with a null value for this column)Quit, and let me add a default in models.py Select an option:

解决方法: 先给’name’任意初始值:name = models.CharField(max_length=50, default=‘abc’) 然后执行:python manage.py makemirations 再执行:python manage.py migrate

再将default删去,即执行:name = models.CharField(max_length=50) 执行:python manage.py makemirations 再执行:python manage.py migrate 解决! 注意:在开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个简单粗暴方法是把migrations目录下的脚本(除__init__.py之外)全部删掉,再把数据库删掉之后创建一个新的数据库,数据库同步操作再重新做一遍。 7、从mysql数据库中查询数据展示在网页 实现逻辑: 用户访问html页面,urls.py负责找到相应的views中的函数,views中的函数负责提供数据用于展示在页面。 (1)在views.py中 import models 8、前后台交互 views中的函数,get:第一次转到该页面;post:提交该页面。

查看原文