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)

路飞项目环境搭建

linux中conda虚拟环境使用(便于项目切换)pip和conda换源

项目虚拟环境配置

Python2.7.14安装和pip配置安装及虚拟环境搭建

路飞-git操作