Python Django从安装到云平台攻略(一)环境安装和框架搭建

     阅读:47

写在最前

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

创建django项目

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

  1. 创建项目:cmd命令先进入目录:cd E:\pj-python\pj01,再在cmd命令行下输入:django-admin startproject pj001 (cmd命令先进入目录:cd E:\pj-python\pj01)
    在这里插入图片描述
  2. 导入项目:打开Pycharm,open,选择刚才创建的项目
    在这里插入图片描述
  3. 创建应用:先在cmd命令行下进入demo所在目录:cd E:\pj-python\pj01\pj001,然后在cmd命令行下输入:python manage.py startapp app001 (cmd命令下先进入pj001所在的目录)
    或者在pycharm的terminal界面也跟cmd一样。
  4. 查看目录:
    在这里插入图片描述
    (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:

  1. Provide a one-off default now (will be set on all existing rows with a null value for this column)
  2. 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:提交该页面。