zoukankan      html  css  js  c++  java
  • pip换源,虚拟环境搭建,项目创建及目录调整和其它配置

    pip换源

    1 pip3 install 模块   # 去国外下,比较慢
    2 pip3 install -i 国内源(豆瓣,清华)模块   # 快一些,但是每次都要加 -i
    3 在pycharm中配置
    
    4 在机器上,永久配置
    	文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:Users电脑用户AppDataRoaming 文件夹中
    	-C:Users你电脑的用户名AppDataRoaming
        -新建文件夹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)),
    ]
    
    
    从来就没有正确的选择,我们只不过是要努力奋斗,使当初的选择变得正确。
  • 相关阅读:
    win10操作技巧介绍,很实用!
    信息时代与人工智能时代的教育变革
    《此生未完成》痛句摘抄(3)
    《下辈子还教书》经典语录(1)
    《给教师的阅读建议》经典语录
    《此生未完成》痛句摘抄(4)
    记录程序人生2020.8.11
    最全、最详细的配置jdk十步法!
    《此生未完成》痛句摘录(2)
    “温室里的花朵”也要直面困难
  • 原文地址:https://www.cnblogs.com/gfeng/p/14852481.html
Copyright © 2011-2022 走看看