0. 学城项目 后端环境配置

本文介绍了Python Web项目的不同类型,如B2C商城、社交网络等,并详细阐述了开发流程,包括pip换源、虚拟环境的创建与管理、Django项目的设置。在数据库配置部分,讲解了创建数据库、用户授权以及Django中自定义User模型的过程。此外,还提到了项目依赖管理和whl模块的安装。
摘要由CSDN通过智能技术生成

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. 开发流程

image-20220429230645162

3. pip换源

直接通过pip访问的是外网, 速度慢. 将pip放入访问地址换成国内的地址, 加快下载模块的速度.
3.1 临时修改
临时修改: pip install xxx -i 地址
pip install pymysql -i http://pypi.douban.com/simple

image-20220429234221769

3.2 永久修改
* 1. 在路径栏中输入 %APPDATA% 到达 C:\Users\用户名\AppData\Roaming 的路径下

image-20220429232805690

* 2. 新建pip文件夹

image-20220429233010718

* 3. 建立 pip.ini 配置文件

image-20220429233127520

* 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

2022-04-30_00408

* 4. 指定virtualenvwrapper.bat脚本代码, 将配置信息同步
     找到安装Python的目录, 打开Script目录 以管理员身份运行virtualenvwrapper.bat文件
     执行一闪而过, 看不到什么信息的

image-20220429235814286

* 5. 在D:\Virtualenvs中使用命令提示符创建虚拟环境项目
     命令: mkvirtualenv -p python3.8 虚拟环境名称
     查看创建的虚拟环境
     命令: workon
D:\Virtualenvs>mkvirtualenv -p python3.8 luffy

image-20220430001503325

* 7. 查看虚拟环境的文件 

image-20220430002713303

* 8. 进入虚拟环境
	 命令: workon luffy
* 9. 安装Django
     命令: pip install django==2.2.2	

image-20220430003244045

4.3 Pycharm使用虚拟环境
* 1. 创建项目时选择虚拟环境中的python.exe
     不需要创建模板  app

2022-04-30_00415

5. 重构项目目录

luffy                  项目名  
  |--logs/             项目运行事/开发时 的日志目录 -包
  |--script/           项目临时使用脚本文件目录
  |--doc/              存放项目介绍信息
      |--readme.md     项目说明
  |--luffy/            项目主应用, 开发时代码存放的目录 -包
      |--urls.py       总路由文件
      |--wsgi.py       Web服务器网关接口
      |--utils/        多个模块, 子应用的公共函数类库, 自己开发的组件
      |--apps/         开发者的代码存放的目录, 以子应用为目录 -包
      |--libs/         第三类/库存放目录, 第三方组件, 模块, 
      |--settings/     配置目录
         |--dve.py     项目来发是本地配置文件
         |--prod.py    项目上线是运行的配置文件

image-20220430015848904

image-20220430020215748

* 1. 将settings.py 的文件代码复制到 settings/dve.py中, 将原来的settings.py 文件删除
* 2. 修改控制台直接使用settings/dve.py的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.dev')

2022-04-30_00418

* 3. 启动项目, 启动项目之后会生成sqlite3的数据库文件, 不需要可以删除!

image-20220430014719591

如果点击启动按钮无法启动, 则需要对启动项目按钮进行编辑
PYTHONUNBUFFERED=1; DJANGO_SETTINGS_MODULE=luffy.settings.dev

image-20220430015202774

* 4. 上面配置文件需要在wsgi.py文件中配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.prod')

image-20220430015351536

* 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

image-20220430021049058

* 7. 配置文件中将 BASE_DIR  apps的路径添加到环境变量中
     设置环境变量之后可以直接导入模块
import os
import sys
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
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'))

2022-04-30_00425

环境变量的设置使用

2022-04-30_00426

可以为apps设置 Sources Root

2022-04-30_00427

之后则不会飘红了, 这个东西不能乱设置, 必须确保这个路径在环境变量中找到!

image-20220430024151444

* 8. 注册app, 配置文件与app文件都改变了, 但是将apps添加环境变量中后, 便能够直接注册app.
     sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))
# app应用列表
INSTALLED_APPS = [
	...
    'user',  # 将apps添加到环境变量之后, 导入应用是能够直接找到user app
]

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

image-20220430134426626

* 7. 配置文件中设置连接数据库的信息
# 数据配置属性
DATABASES = {
    'default': {
        # 修改连接数据库的引擎
        'ENGINE': 'django.db.backends.mysql',
        # 连接的数据库
        'NAME': 'luffy',
        # 使用的账户
        'USER': 'luffy',
        # 账户的密码
        'PASSWORD': 'Luffy123?',
        # 地址, 本地 127.0.0.1 或 localhost
        'HOST': '127.0.0.1',
        # 端口
        'POST': 'Luffy123?'
    }
}

# 执行替换数据库操作
import pymysql
pymysql.install_as_MySQLdb()
* 8. Django 2.0.7 版本后可以出现一些问题, 需要修改源码

2022-04-30_00431

* 9. 如果提示 需要mysqlclient 1.3.13或更新版本, 去pymysql的源代码中 将版本提示代码注释掉
# if version < (1, 3, 13):
#     raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

2022-04-30_00432

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

2022-04-30_00434

* 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
# 导入serve视图类
from django.views.static import serve
# 导入内置配置文件, 会自动到dev.py配置文件中去查询
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

# Create your models here.
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表
# 'app.表名'
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. 删除数据库迁移文件

2022-04-30_00435

admin  auth 的数据库迁移文件第一次右击选择删除后, 文件还存在, 倒是右击没有了删除选项, 则代表删除成功!

2022-04-30_00436

2022-04-30_00437

* 10. 删除所有已经创建的表
使用Navicat Premium 连接数据库, 先点测试连接, 测试成功点击确定.
库名 luffy
用户 luffy
密码 Luffy123?

image-20220430175423864

一次无法全部删除, 剩下的表在全选中删除即可

image-20220430175520499

* 11. 执行数据库迁移命令
python manage.py makemigrations
python manage.py migrate   
* 12. 在luffy项目主应用中创建media/icon目录, 添加一个默认头像

image-20220430180900293

* 13. 启动项目, 测试媒体文件开发
http://127.0.0.1:8000/media/icon/default.png

8. 项目依赖库文件

requirement.txt 中存放项目依赖的模块
pip list   查看所有的模块及版本号

image-20220430225439357

pip freeze 查看所有的模块及版本号

image-20220430225500907

# 查询模块及版本并追加到文件中
pip freeze > requirement.txt

image-20220430225622983

之后再使用项目的时候输入 pip install -r requirement.txt -i 豆瓣源 下载安装模块

9. whl模块文件安装

pip install 命令可能会存在安装不了模块的情况.
windows上你装的模块, 都是 xxx.whl文件可以将模块文件下载到本地再安装.
模块下载网站: https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

image-20220430230253312

选择一个模块下载练习安装 cp python的版本

2022-04-30_00470

pip install 路径

image-20220430231149901

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值