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
    -以后再装模块,就会走豆瓣源

pip换源,虚拟环境搭建,项目创建及目录调整和其它配置

虚拟环境搭建

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/      	# 保存项目运营时的脚本文件 - 文件夹
"""
# 整个项目的启动是依据配置文件启动
# 如果把某个路径加入了环境变量
# 再导入包,直接从环境变量开始导起

pip换源,虚拟环境搭建,项目创建及目录调整和其它配置

项目生成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)),
]

上一篇:C语言-基础函数查询


下一篇:(JAVA)对象数组的排序