Django OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试

代码错误提示:


    OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。


报错代码位置:


    foo/main.py    28行


    s = socketserver.ThreadingTCPServer((config.ip,config.port),MyServer)


代码架构:


    conf

        --config.py

    data

        --data.db

    foo

        -- main.py

        --server.py

        --models.py

    manage.py




conf/config.py代码示例:


ip = "127.0.0.1"

port = 8000

manage.py代码示例:


from foo import main

if __name__ == '__main__':

    main.ArgvHandler()

foo/main.py代码示例:


import optparse

import socketserver

from .server import MyServer

from conf import config

class ArgvHandler():

    def __init__(self):

        self.op = optparse.OptionParser()

        options,args = self.op.parse_args()

        self.verify_args(options,args)

    # 程序启动命令检查

    def verify_args(self,options,args):

        if len(args) > 0:

            cmd = args[0]

            if hasattr(self,cmd):

                func = getattr(self,cmd)

                func()

        else:

            args.insert(0,'start')

            return self.verify_args(options,args)

    # 启动socket

    def start(self):

        print('服务端正在工作')

        s = socketserver.ThreadingTCPServer((config.ip,MyServer)

        s.serve_forever()

foo/main.py代码示例:


import socketserver

import json

from conf import config

from foo.models import DbSession,User

session = DbSession()

STATUS_CODE = {

    250: "Invalid cmd format,e.g: {'action':'get','filename':'test.py','size':344}",

    251: "Invalid cmd ",

    252: "Invalid auth data",

    253: "Wrong username or password",

    254: "Passed authentication",

    255: "Filename doesn't provided",

    256: "File doesn't exist on server",

    257: "ready to send file",

    258: "md5 verification",

    800: "the file exist,but not enough,is continue? ",

    801: "the file exist !",

    802: " ready to receive datas",

    900: "md5 valdate success"

}

class MyServer(socketserver.BaseRequestHandler):

    def handle(self):

        while True:

            data = self.request.recv(1024).strip()

            data = json.loads(data.decode('utf-8'))

            if data.get('action'):

                if hasattr(self,data.get('achtion')):

                    func = getattr(self,data.get('action'))

                    func(data)

                else:

                    print('无效命令')

            else:

                print('无效命令')

    # 获取用户账号信息

    def auth(self,**data):

        username = data['username']

        password = data['password']

        user = self.authentication(username,password)

        if user:

            self.send_response(254)

        else:

            self.send_response(253)

    # 从数据库提取账号密码

    def authentication(self,username,password):

        user = session.session.query(User).filter_by(username=username).first()

        if user and user.verify_password(password):

            self.user = username

            return True

    def send_response(self,status_code):

        res = json.dumps({"status_code": status_code}).encode('utf-8')

        self.request.sendall(res)

    def put(self,**data):

        pass

foo/models.py代码示例:


from sqlalchemy import create_engine

from sqlalchemy import Column,Integer,String,Float

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker

import os

from werkzeug.security import generate_password_hash,check_password_hash

basedir = os.path.dirname(os.path.dirname(__file__))

data_f = os.path.join(basedir,'data/data.db')

# 绑定引擎

engine = create_engine('sqlite:///{}'.format(data_f))

# 建立基类

Base = declarative_base()

# 定义User对象

class User(Base):

    __tablename__ = 'users'

    id = Column(Integer,primary_key=True)

    username = Column(String)

    password_hash = Column(String)

    space = Column(Integer)

    has_space = Column(Float,default=0)

    @property

    def password(self):

        raise AttributeError('密码不具有可读性')

    @password.setter

    def password(self,password):

        self.password_hash = generate_password_hash(password)

    def verify_password(self,password):

        return check_password_hash(self.password_hash,password)

class DbSession:

    Session = sessionmaker(bind=engine)

    session = Session()

if not os.path.isfile(data_f):

    # 创建数据库,如果存在自动替换

    Base.metadata.create_all(engine)



解决结果:


   第一种解决方法:


   删除原来配置文件,重写配置文件,可能是配置文件出错。


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path('authors/$', views.AuthorView.as_view()), re_path('book/(?P\d+)/$', vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = ''' <li><s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 > 依赖jQuery文件 实例-->GET请求: 手动发送 > 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render