pip换源,虚拟环境搭建,项目创建及目录调整和其它配置
Posted 溜子上的希望
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pip换源,虚拟环境搭建,项目创建及目录调整和其它配置相关的知识,希望对你有一定的参考价值。
pip换源
1 pip3 install 模块 # 去国外下,比较慢
2 pip3 install -i 国内源(豆瓣,清华)模块 # 快一些,但是每次都要加 -i
3 在pycharm中配置
4 在机器上,永久配置
文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:\\Users\\电脑用户\\AppData\\Roaming 文件夹中
-C:\\Users\\你电脑的用户名\\AppData\\Roaming
-新建文件夹pip
-在文件夹下新建 pip.ini 配置文件
新增 pip.ini 配置文件内容
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
-以后再装模块,就会走豆瓣源
虚拟环境搭建
1 两个项目,一个依赖了1.11.9,另一个依赖了2.2.2
2 虚拟环境的出现是为了解决多个项目依赖版本不同的问题
3 如何搭建:
:> pip3 install virtualenv # 创建虚拟环境的模块
# 有了虚拟环境以后可以快速的在不同环境间进行切换
:> pip3 install virtualenvwrapper-win # 只针对于window,
:> pip3 install virtualenvwrapper # 只针对于linux
4 虚拟环境的创建路径
-环境变量中新增一个key:value
-WORKON_HOME: D:\\Virtualenvs
-确认好scripts路径下有bat批处理文件
-linux确认好scripts路径下有sh批处理文件
4 开始创建虚拟环境(在cmd执行)
:> mkvirtualenv -p python3 虚拟环境名称
:> mkvirtualenv python 虚拟环境名称
-退出虚拟环境
:> deactivate
-进入虚拟环境
:> workon # 列出所有虚拟环境
:> workon luffy
项目创建,目录调整
# 项目创建,指定新建的虚拟环境
# 进行目录调整,把app统一放到某个路径下:luffapi下的apps(拖过去)
-配置文件中
-path=os.path.join(BASE_DIR,\'luffyapi\',\'apps\')
-sys.path.append(path)
# 后期创建app的时候,需要先切到apps路径下
python ../../manage.py startapp order
# 两套配置文件(一套是开发环境,一套是上线环境)
-再项目路径下创建了一个setting文件夹,新建了
-dev.py # 开发用这个配置
-pro.py # 上线用这个配置
-坑:BASE_DIR变成了 以后BASE_DIR是luffyapi下的小luffyapi
-需要改:path=os.path.join(BASE_DIR,\'apps\')
# 如果使用python manage.py runserver 能正常运行,需要修改manage.py中
os.environ.setdefault(\'DJANGO_SETTINGS_MODULE\', \'luffyapi.settings.dev\')
"""
├─ luffyapi
├─logs/ # 项目运行时/开发时日志目录 - 包
├─ manage.py # 脚本文件
├─ luffyapi/ # 项目主应用,开发时的代码保存 - 包
├─ apps/ # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包
├─ libs/ # 第三方类库的保存目录[第三方组件、模块] - 包
├─ settings/ # 配置目录 - 包
├─ dev.py # 项目开发时的本地配置
└─ pro.py # 项目上线时的运行配置
├─ urls.py # 总路由
└─ utils/ # 多个模块[子应用]的公共函数类库[自己开发的组件]
└─ scripts/ # 保存项目运营时的脚本文件 - 文件夹
"""
# 整个项目的启动是依据配置文件启动
# 如果把某个路径加入了环境变量
# 再导入包,直接从环境变量开始导起
项目生成requirements.txt
1 项目的依赖,以后标准,每个项目都必须有,包括脚本项目
2 直接手写requirements.txt,放在项目根路径下
3 自动生成
:> pip3 freeze >requirements.txt
后台本地化配置
# 在配置文件中改
LANGUAGE_CODE = \'zh-hans\'
TIME_ZONE = \'Asia/shanghai\'
USE_I18N = True
USE_L10N = True
USE_TZ = False
数据库配置
1 使用mysql数据库,建一个库,给开发人员分配一个开发用户
2 创建luffy库
-使用navicate创建库
-使用命令
-create database luffy default charset=utf8;
3 创建用户,授予权限
-查看有那些用户
select user,host,password from mysql.user;
-创建luffy用户,授予luffy库的所有权限
# 授权账号命令:grant 权限(create, update) on 库.表 to \'账号\'@\'host\' identified by \'密码\'
grant all privileges on luffy.* to \'luffy\'@\'%\' identified by \'Luffy123?\';
grant all privileges on luffy.* to \'luffy\'@\'localhost\' identified by \'Luffy123?\';
flush privileges;
4 django配置
-在配置文件中配置
\'default\': {
\'ENGINE\': \'django.db.backends.mysql\',
\'NAME\': \'luffy\',
\'USER\': \'luffy\',
\'PASSWORD\': \'Luffy123?\',
\'HOST\': \'localhost\',
\'PORT\': 3306
}
-密码容易被人看到(写到环境变量中)
password=os.getenv(\'db_password\',\'Luffy123?\')
print(password)
DATABASES = {
# }
\'default\': {
\'ENGINE\': \'django.db.backends.mysql\',
\'NAME\': \'luffy\',
\'USER\': \'luffy\',
\'PASSWORD\': password,
\'HOST\': \'localhost\',
\'PORT\': 3306
}
}
5 安装pymysql,或者是mysqlclient
-运气好:一把装好就用mysqlclient
-pip3 install mysqlclient
-或者使用pymysql(django版本超过2.0.7,需要改源码)
-在配置文件中加入
import pymysql
pymysql.install_as_MySQLdb()
后端项目建好,调整好,写一个多方式登录接口
models.py
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
phone = models.BigIntegerField()
email = models.EmailField()
serializer.py
from user import models
from rest_framework import serializers
import re
from rest_framework.exceptions import ValidationError
from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
class UserInfoModelSerializer(serializers.ModelSerializer):
username = serializers.CharField()
class Meta:
model = models.UserInfo
fields = [\'username\', \'password\']
def validate(self, attrs):
username = attrs.get(\'username\')
password = attrs.get(\'password\')
# 多方式登录,username有可能是手机号,邮箱,用户名
if re.match(\'^1[3-9][0-9]{9}$\', username):
# 用手机号登录
user = models.UserInfo.objects.filter(phone=username).first()
elif re.match(r\'^.+@.+$\', username):
# 以邮箱登录
user = models.UserInfo.objects.filter(email=username).first()
else:
# 以用户名登录
user = models.UserInfo.objects.filter(username=username,password=password).first()
if user:
# 登录成,签发token
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
self.context[\'token\'] = token
self.context[\'username\'] = user.username
return attrs
else:
# 校验不通过
raise ValidationError(\'用户名或密码错误\')
views.py
from django.shortcuts import render
from rest_framework.generics import CreateAPIView
from user import models
from user import serializer
from rest_framework.response import Response
from rest_framework.viewsets import ViewSetMixin
# class UserLogin(CreateAPIView): # 需要自己配路径
class UserLogin(ViewSetMixin, CreateAPIView): # 自动生成路由
queryset = models.UserInfo.objects.all()
serializer_class = serializer.UserInfoModelSerializer
def create(self, request, *args, **kwargs):
# context是上下文,是视图类和序列化类沟通的桥梁
ser = self.get_serializer(data=request.data)
if ser.is_valid():
token = ser.context[\'token\']
username = ser.context[\'username\']
print(username)
return Response({\'status\': 100, \'msg\': \'登录成功\', \'token\': token, \'username\': username})
else:
print(ser.errors)
return Response({\'status\': 101, \'msg\': \'用户名或密码错误\'})
urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import SimpleRouter
from user import views
router = SimpleRouter()
router.register(\'login\', views.UserLogin)
urlpatterns = [
path(\'admin/\', admin.site.urls),
path(\'api/\', include(router.urls)),
]
以上是关于pip换源,虚拟环境搭建,项目创建及目录调整和其它配置的主要内容,如果未能解决你的问题,请参考以下文章
Python pip换源 创建虚拟环境 luffy项目配置(数据库bug)