1. 企业的web项目类型
1. 商城
1.1 B2C直销商城 商家与会员直接交易(Busioness To Customer)
1.2 B2B批发商城 商家与商家直接交易
1.3 B2B2C购物平台 商家和会员在另一个商家提供的平台上进行交易
1.4 C2B定制商城 会员向商家发起定制商品的需求, 商家去完成
1.5 O2O线上线下交易平台
1.6 C2C二手交易平台
2. 门户网站[企业网站和门户网站]
3. 社交网络
4. 咨询论坛
5. 内部系统
6. 个人博客
7. 内容收费
2. 开发流程
3. pip换源
直接通过pip访问的是外网, 速度慢. 将pip放入访问地址换成国内的地址, 加快下载模块的速度.
3.1 临时修改
临时修改: pip install xxx -i 地址
pip install pymysql -i http://pypi.douban.com/simple
3.2 永久修改
* 1. 在路径栏中输入 %APPDATA% 到达 C:\Users\用户名\AppData\Roaming 的路径下
* 2. 新建pip文件夹
* 3. 建立 pip.ini 配置文件
* 4. 在配置文件中输入以下配置信息, 并保存!
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
4. 创建虚拟环境
不同的应用开发环境相互独立
环境升级不影响其他应用, 也不会影响全局的Python环境
防止出现包管理混乱及包版本冲突
4.1 常用命令
1. 创建项目
命令: mkvirtualenv -p python3.8 虚拟环境名字
2. 查看创建的虚拟环境
命令: workon
3. 使用虚拟环境
workon 虚拟环境名字
4. 进入|退出 虚拟环境的Python环境
python | exit()
5. 为虚拟环境安装模块(已经进入到虚拟环境中)
pip install 模块名
6. 退出当前虚拟环境
deactivate
7. 删除虚拟环境 (删除当前虚拟环境要先退出)
rmvirtualenv 虚拟环境名字
4.2 虚拟环境下创建项目
* 1. 安装依赖的模块
pip install virtualenv
pip install virtualenvwrapper-win
* 2. 建立项目存放目录
在D盘下创建一个Virtualenvs文件夹
* 3. 配置环境变量
变量名 WORKON_HOME
变量值 D:\Virtualenvs
* 4. 指定virtualenvwrapper.bat脚本代码, 将配置信息同步
找到安装Python的目录, 打开Script目录 以管理员身份运行virtualenvwrapper.bat文件
执行一闪而过, 看不到什么信息的
* 5. 在D:\Virtualenvs中使用命令提示符创建虚拟环境项目
命令: mkvirtualenv -p python3.8 虚拟环境名称
查看创建的虚拟环境
命令: workon
D:\Virtualenvs>mkvirtualenv -p python3.8 luffy
* 7. 查看虚拟环境的文件
* 8. 进入虚拟环境
命令: workon luffy
* 9. 安装Django
命令: pip install django==2.2.2
4.3 Pycharm使用虚拟环境
* 1. 创建项目时选择虚拟环境中的python.exe
不需要创建模板 与 app
5. 重构项目目录
luffy 项目名
|--logs/ 项目运行事/开发时 的日志目录 -包
|--script/ 项目临时使用脚本文件目录
|--doc/ 存放项目介绍信息
|--readme.md 项目说明
|--luffy/ 项目主应用, 开发时代码存放的目录 -包
|--urls.py 总路由文件
|--wsgi.py Web服务器网关接口
|--utils/ 多个模块, 子应用的公共函数类库, 自己开发的组件
|--apps/ 开发者的代码存放的目录, 以子应用为目录 -包
|--libs/ 第三类/库存放目录, 第三方组件, 模块, 包
|--settings/ 配置目录
|--dve.py 项目来发是本地配置文件
|--prod.py 项目上线是运行的配置文件
* 1. 将settings.py 的文件代码复制到 settings/dve.py中, 将原来的settings.py 文件删除
* 2. 修改控制台直接使用settings/dve.py的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.dev')
* 3. 启动项目, 启动项目之后会生成sqlite3的数据库文件, 不需要可以删除!
如果点击启动按钮无法启动, 则需要对启动项目按钮进行编辑
PYTHONUNBUFFERED=1; DJANGO_SETTINGS_MODULE=luffy.settings.dev
* 4. 上面配置文件需要在wsgi.py文件中配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.prod')
* 5. 国际化设置
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
* 6. 创建app, 需要在apps包的路径下执行 python manage.py startapp app应用
该命令在哪里执行则会在那创建app.
1. 先切换路径到apps目录中
PS F:\synchro\Project\luffy> cd luffy/apps
2. 执行创建app命令
PS F:\synchro\Project\luffy\luffy\apps> python ../../manage.py startapp user
* 7. 配置文件中将 BASE_DIR 与 apps的路径添加到环境变量中
设置环境变量之后可以直接导入模块
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)
sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))
环境变量的设置使用
可以为apps设置 Sources Root
之后则不会飘红了, 这个东西不能乱设置, 必须确保这个路径在环境变量中找到!
* 8. 注册app, 配置文件与app文件都改变了, 但是将apps添加环境变量中后, 便能够直接注册app.
sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))
INSTALLED_APPS = [
...
'user',
]
6. 数据库配置
6.1 创建数据库
* 1. 在cmd中使用管理员连接数据库
命令: mysql -uroot -p123
C:\Users\13600>mysql -uroot -p123
* 2. 创建数据库
命令: create databse luffy default charset=utf8;
mysql> create database luffy default charset=utf8;
Query OK, 1 row affected (0.02 sec)
* 3. 查看创建的数据库
mysql> show databases;
+
| Database |
+
| information_schema |
| luffy |
| performance_schema |
+
3 rows in set (0.01 sec)
* 4. 查看用户信息
命令: select user, host, password from mysql.user;
5.7之后版本: select user, host, authentication_string from mysql.user;
mysql> select user, host, password from mysql.user;
+
| user | host | password |
+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
+
4 rows in set (0.00 sec)
6.2 为数据库指定用户
在开大项目的时候不直接使用root用户去连接数据库, 而是创建一个用户去操作数据表.
使用root用户登入之后, 新建一个用户, 并为用户设置权限, 密码
授权账户名: grant 权限(create, update...) on 库.表 to '账户'@'host' identified by '密码'
* 1. 配置任意ip都可以连接数据的账户
命令: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
mysql> grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
Query OK, 0 rows affected (0.00 sec)
* 2. 由于数据库版本问题, 可能本地连接不上, 为本地用户单独配置
C:\Users\13600>mysql -uluffy -pLuffy123?
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'luffy'@'localhost' (using password: YES)
mysql> grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
Query OK, 0 rows affected (0.02 sec)
* 3. 重新加载权限
命令: flush privileges;
* 4. 查看用户信息
只能操作数据的账户 luffy 密码 Luffy123?
mysql> select user, host, password from mysql.user;
+
| user | host | password |
+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| root | 127.0.0.1 | |
| root | ::1 | |
| luffy | % | *A5576062BB7EC62806008F537658C42F0456DB9B |
| luffy | localhost | *A5576062BB7EC62806008F537658C42F0456DB9B |
+
5 rows in set (0.00 sec)
* 5. 登入
C:\Users\13600>mysql -uluffy -pLuffy123?
...
>mysql
* 6. 下载pymysql
* 7. 配置文件中设置连接数据库的信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'luffy',
'USER': 'luffy',
'PASSWORD': 'Luffy123?',
'HOST': '127.0.0.1',
'POST': 'Luffy123?'
}
}
import pymysql
pymysql.install_as_MySQLdb()
* 8. Django 2.0.7 版本后可以出现一些问题, 需要修改源码
* 9. 如果提示 需要mysqlclient 1.3.13或更新版本, 去pymysql的源代码中 将版本提示代码注释掉
7. 创建User表
用户表基于内置auth的user表.
注意: 在继承该表之前执行过数据库迁移命令, 后期想继承该表, 需要把所有app下的迁移文件删除, 之后删除库中表.
1. 删除 admin, auth, 自定义的app下的migrate文件的迁移文件, __init__.py 不能删除!
2. 删库使用Navicat Premium 将数据库的文件保存好, 再删除表文件重新执行数据库迁移命令!
from django.contrib import admin
from django.contrib import auth
* 1. 创建用户表, 先不继承AbstractUser
from django.db import models
class User(models.Model):
phone = models.CharField(max_length=11, verbose_name='手机号码')
icon = models.ImageField(upload_to='icon', default='icon/default.png')
* 2. 配置文件中, 设置媒体文件路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
* 3. 开发媒体文件的访问
from django.contrib import admin
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})
]
* 4. 头像上传依赖Pillow模块
pip install Pillow
* 5. 执行数据库迁移命令
python manage.py makemigrations
python manage.py migrate
* 6. 在继承AbstractUser
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=11, verbose_name='手机号码')
icon = models.ImageField(upload_to='icon', default='icon/default.png')
* 7. 配置使用自己定义的user表
AUTH_USER_MODEL = 'user.user'
* 8. 执行数据库迁移命令
PS F:\synchro\Project\luffy> python manage.py makemigrations
You are trying to add a non-nullable field 'password' to user 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:
您正在尝试向用户添加一个不可为空的字段“password”,而没有默认值;我们不能这样做(数据库需要一些东西来填充现有的行)。
请选择修复程序:
1) 现在提供一个一次性默认值(将在所有现有行上设置此列的空值)
2) 退出,让我在模型中添加一个默认值
* 9. 删除数据库迁移文件
admin 与 auth 的数据库迁移文件第一次右击选择删除后, 文件还存在, 倒是右击没有了删除选项, 则代表删除成功!
* 10. 删除所有已经创建的表
使用Navicat Premium 连接数据库, 先点测试连接, 测试成功点击确定.
库名 luffy
用户 luffy
密码 Luffy123?
一次无法全部删除, 剩下的表在全选中删除即可
* 11. 执行数据库迁移命令
python manage.py makemigrations
python manage.py migrate
* 12. 在luffy项目主应用中创建media/icon目录, 添加一个默认头像
* 13. 启动项目, 测试媒体文件开发
http://127.0.0.1:8000/media/icon/default.png
8. 项目依赖库文件
requirement.txt 中存放项目依赖的模块
pip list 查看所有的模块及版本号
pip freeze 查看所有的模块及版本号
# 查询模块及版本并追加到文件中
pip freeze > requirement.txt
之后再使用项目的时候输入 pip install -r requirement.txt -i 豆瓣源 下载安装模块
9. whl模块文件安装
pip install 命令可能会存在安装不了模块的情况.
windows上你装的模块, 都是 xxx.whl文件可以将模块文件下载到本地再安装.
模块下载网站: https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
选择一个模块下载练习安装 cp python的版本
pip install 路径